当我在兼容性视图中添加 URL/Domain 时,找不到 IEDriver 的 Selenium XPath
Selenium XPath not found for IEDriver when I add URL/Domain in compatibility view
当我在没有兼容性视图的情况下使用 IEDriver
执行我的脚本时,我的测试脚本是 运行 没有任何问题。
但是,如果我在兼容性视图中添加域后执行相同的脚本,则找不到某些元素,我会遇到异常。
例如
我想从此 DOM:
中获取所选项目的文本
<select id="selectNumber" name="selectNumber" style="width:180px;">
<option selected="selected" value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
</select>
我正在使用 XPath .//*[@id='selectNumber']/option[@selected='selected']
获取文本,但它不起作用。
我刚刚检查过在 IE DOM 中 selected="selected"
不会显示所选选项,直到我手动更改文档版本。
您可以使用适用于所有浏览器的 Select
class。这是一些代码
Select sel = new Select(driver.findElement(By.id("selectNumber")));
WebElement selectOption = sel.getFirstSelectedOption();
String text = selectOption.getText();
我认为你应该考虑从使用 XPath
改为使用 cssSelector
。找元素就安全多了,不依赖于整个"path"。使用 cssSelector
运行 IEDriver
时它很有可能不会中断(如您在问题中所述)。
您可以使用两者实现相同的目标,但是当您使用 XPath 时,您的 DOM 对更改更加敏感,并且您更有可能在页面更改后看到测试失败。
对于您的情况,您可以通过两种方式使用它:
XPath(你必须拥有它)
driver.findElement(By.xpath(".//*[@id='selectNumber']/option[@selected='selected']"))
选择器
driver.findElement(By.cssSelector("#selectNumber[selected]"))
当你有更复杂的 "paths" 时,你可以在 cssSelectors 中组合更多的东西,比如 CSS 类。例如(当您没有身份证件时):
<select class"nice-dropdown" name="selectNumber" style="width:180px;">
<option selected="selected" value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
</select>
driver.findElement(By.cssSelector("select.nice-dropdown"))
(return select 元素)
driver.findElement(By.cssSelector("select.nice-dropdown option[value='3']"))
(return 值为 3 的选项)
selectors
你的 "paths" 更短了。它们的工作方式与 select 或在 CSS.
中的使用方式相同
作为参考:
希望此信息对您有所帮助。
当我在没有兼容性视图的情况下使用 IEDriver
执行我的脚本时,我的测试脚本是 运行 没有任何问题。
但是,如果我在兼容性视图中添加域后执行相同的脚本,则找不到某些元素,我会遇到异常。
例如 我想从此 DOM:
中获取所选项目的文本<select id="selectNumber" name="selectNumber" style="width:180px;">
<option selected="selected" value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
</select>
我正在使用 XPath .//*[@id='selectNumber']/option[@selected='selected']
获取文本,但它不起作用。
我刚刚检查过在 IE DOM 中 selected="selected"
不会显示所选选项,直到我手动更改文档版本。
您可以使用适用于所有浏览器的 Select
class。这是一些代码
Select sel = new Select(driver.findElement(By.id("selectNumber")));
WebElement selectOption = sel.getFirstSelectedOption();
String text = selectOption.getText();
我认为你应该考虑从使用 XPath
改为使用 cssSelector
。找元素就安全多了,不依赖于整个"path"。使用 cssSelector
运行 IEDriver
时它很有可能不会中断(如您在问题中所述)。
您可以使用两者实现相同的目标,但是当您使用 XPath 时,您的 DOM 对更改更加敏感,并且您更有可能在页面更改后看到测试失败。
对于您的情况,您可以通过两种方式使用它:
XPath(你必须拥有它)
driver.findElement(By.xpath(".//*[@id='selectNumber']/option[@selected='selected']"))
选择器
driver.findElement(By.cssSelector("#selectNumber[selected]"))
当你有更复杂的 "paths" 时,你可以在 cssSelectors 中组合更多的东西,比如 CSS 类。例如(当您没有身份证件时):
<select class"nice-dropdown" name="selectNumber" style="width:180px;">
<option selected="selected" value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
</select>
driver.findElement(By.cssSelector("select.nice-dropdown"))
(return select 元素)
driver.findElement(By.cssSelector("select.nice-dropdown option[value='3']"))
(return 值为 3 的选项)
selectors
你的 "paths" 更短了。它们的工作方式与 select 或在 CSS.
作为参考:
希望此信息对您有所帮助。