selenium web自动化问题整理(二)

1、元素定位

—— xpath定位基本解决所有难找的元素

(1)元素属性定位:xpath = "//input[@placeholder='门槛']"

 (2)元素文本定位:xpath="//span[text()='确 定']" ,或者包含某文本//span[contains(text()='确 定']

(3)某个节点不好找时,可找到其子节点,通过子节点的父节点来查找:xpath="//div[text()='选择模板']/parent::div"

(4)如果某个元素通过属性查找不是唯一,除了存放list取索引外,可通过获取某个固定的同级节点,通过其节点的所有平级结点来获取:

xpath="//span[text()='领取后 ']/preceding-sibling::span/input"

备注:

1、火狐浏览器插件firepath是查找元素的利器,可通过xpath来判断当前定位方法获取到的位置在页面上有几个,你想要获取的元素是第几个,然后根据list来取当前index下的元素

2、上述(3)(4)方法为使用xpath的轴(Axis)进行元素定位,可以解决大部分难以查找的元素

 

2、其他常见的问题

(1)有时某个操作之后会跳入一个iframe链接,如下图:

可以先切换到该frame中后才能继续查找到该页面的元素: 

driver.switchTo().frame( driver.find_element_by_xpath(" .//*[@id='myIfame']/iframe"));

(2)某些时候元素找正确了,但是直接用selenium封装的click方法一直报错,可以用JavaScriptExecutor单击元素来解决问题(比如操作日历控件时)

  ((JavascriptExecutor) driver).executeScript("arguments[0].click();",webElement);

(3)web端自动化速度非常快,有时候页面元素定位正确,但就是报错找不到该元素,可以通过设置等待时间来保持代码的稳定性

常用的隐式等待: 

driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

常用的显式等待: 

 WebDriverWait wait = new WebDriverWait(driver, 10);

 wait.until(ExpectedConditions.presenceOfElementLocated(WebElement);

(4)调用selenium封装的driver.switchTo.alert() 或 alert.accept()对非JS原生的confirm弹框操作没有效果

解决方法:模拟鼠标键盘操作enter键来确认(同理可模拟键盘上很多其他键,如TAB键等,根据实际需要自行选择

Actions action = new Actions(driver);

action.sendKeys(Keys.ENTER).build().perform();

(5)上传图片最简单的方法:sendKeys(文件路径),但是注意一定要定位到input标签上,而不是div上,否则会报错:cannot fouse element(因为div不支持输入sendKeys)

          

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值