selenium找不到元素的几种原因(通过xpath定位元素不准确)

1.找到元素后,click没有作用,可以试试用action里的sendKeys模仿键盘敲enter键

(注意:1.enter之前可能需要tab;2.sendKeys之后需要perform)

例:

//点击数据中心类型下拉框

createObject.type.click();

//数据中心类型下拉框click点不到,用tab键和enter键代替(sendKeys之后要perform一下)

actions.sendKeys(Keys.TAB);

actions.perform();

actions.sendKeys(Keys.ENTER);

actions.perform();

(另外,有时能点到,有时点不到,可能是页面不稳定,可以sleep一下试试)

2.获取某个元素不好获取时,可以获取他的子元素/父元素,然后获取对应元素

注意,`.`代表当前节点; '..'代表父节点

Webelement div= driver.findElement(By.xpath("//div[@id,'div']"));

通过xpath定位div的父元素:

WebElement input = div.findElement(By.xpath("./.."));

通过xpath定位div的子元素input(//表示从当前元素开始寻找下级、下下级、下下下级等):

WebElement input = div.findElement(By.xpath(".//input"));

3.获取元素进行点击等操作时,最好获取input等元素,有的元素是不可点击的,如span

4.获取到的元素是一组元素时,用获取多个元素的方法,获取到之后再get(i)来获取其中的某一个元素

5.清除输入框中的数据使用clear方法无效的时候,可以模拟键盘ctrl+A然后delete,具体操作如下updateObject.code.sendKeys(Keys.chord(Keys.CONTROL,"a"));

updateObject.code.sendKeys(Keys.DELETE);

6.如果在浏览器中新打开了一个页面,需要切换到新页面

//获取所有的打开的浏览器窗口 driver.getWindowHandles() 会返回一个set集合
Set<String> winHandelsSet=driver.getWindowHandles();
// 将set集合存入list对象
List<String> winHandels = new ArrayList<String>(winHandelsSet);
//切换到新窗口
driver.switchTo().window(winHandels.get(1));
//切换到原来的窗口
driver.switchTo().window(winHandels.get(0));

顺便补充一个关闭tab窗口的方法

# 1.关闭浏览器全部标签页
driver.quit()
# 2.关闭当前标签页(从标签页A打开新的标签页B,关闭标签页A)
driver.close()

7.定位复合class元素

例如:一个日历选择控件,今天的日期class是:<td class="day active">9</td>,其中,day 和 active 就是两个class 属性名称

解决方法:①如果这两个className中有一个是可以唯一确定这个元素,可以选择其中一个使用,如findElement(By.className("active");

②如果不能唯一确定,就先findElements,然后get(i);

8.元素在页面下方,需要滚动页面才能点到

参考 https://www.cnblogs.com/dk1024/p/11743889.html

本人测试,这个方法最好用 

WebElement element = driver.findElement(By.id("ID")));

((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView();", element);

  • 5
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Selenium 定位不到元素时,可以尝试以下几种方法来解决问题: 1. 确保元素存在:首先确认元素是否确实存在于页面上,并且在定位元素之前是否已经加载完毕。可以通过手动操作页面或者查看页面源代码来确认元素是否存在。 2. 使用不同的定位方法:尝试使用不同的定位方法来定位元素,例如使用 `find_element_by_id`、`find_element_by_xpath`、`find_element_by_css_selector` 等方法。有时候使用不同的定位方法可以解决定位问题。 3. 使用等待机制:等待页面加载完成或者元素出现在页面上是很常见的操作,可以使用 Selenium 中的等待机制来等待元素的出现。例如使用 `WebDriverWait` 类结合 `expected_conditions` 来等待元素的可见性、可点击等条件。 ```python from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By # 等待元素可见 element = WebDriverWait(driver, 10).until( EC.visibility_of_element_located((By.ID, "element_id")) ) # 或者等待元素可点击 element = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.ID, "element_id")) ) ``` 4. 检查浏览器驱动:确保使用的浏览器驱动是最新版本,并且与当前浏览器版本兼容。 5. 检查元素定位表达式:检查使用的元素定位表达式是否正确,可以通过浏览器的开发者工具来检查元素的属性和路径。 如果尝试了以上方法仍然无法定位元素,可以提供更多关于页面结构和目标元素的信息,以便更准确地帮助解决问题。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值