我正在寻找一些非常简单的东西。它可以使用Selenium IDE录制工具,但它不允许我选择我得到的定位器。
我想用:
driver.findElement(By.className(str))
找东西。我需要的只是观察网页上的哪些UI元素被点击并写出这些标签的类属性。
如果我使用Selenium IDE录制(并导出到正确类型的东西),我得到:
@Test
public void testNav() throws Exception {
driver.get(baseUrl + "/");
driver.findElement(By.name("3.1.1.5.1.1")).clear();
driver.findElement(By.name("3.1.1.5.1.1")).sendKeys("dan");
driver.findElement(By.name("3.1.1.5.1.5")).click();
driver.findElement(By.linkText("Products")).click();
driver.findElement(By.linkText("Categories")).click();
driver.findElement(By.linkText("Create a Category")).click();
driver.findElement(By.linkText("Cancel")).click();
driver.findElement(By.linkText("Products")).click();
driver.findElement(By.cssSelector("a.DisplayAdminProductsLink")).click();
driver.findElement(By.linkText("Product1")).click();
这有问题。首先,它不会给我任何By.className()调用。为什么?前3个电话对我没有帮助。我正在使用的框架将任意内容放入名称中。如何才能看到类属性?
在所有上述标签的class属性中实际上是唯一的单词。我设计我的应用程序就是这样。但它不会使用它们。
早些时候我问过:
为什么要执行“driver.findElement()。click()”?这很脆弱,没有 最终工作。
我需要的是:
elt = driver.waitFor(By.className("c")); elt.click();
这个可以重现......
我正在考虑从问题中删除,因为findElement()代码确实有效。您需要在驱动程序上设置一般超时。这可以做到这一点并不是很明显,但它可以。
所以,继续......
我可以转到“选项”并更改eclipse中“定位器构建器”的顺序。我可以把“css”放在顶部。然后我得到:
driver.findElement(By.cssSelector("input[name=\"3.1.1.5.1.1\"]")).clear();
driver.findElement(By.cssSelector("input[name=\"3.1.1.5.1.1\"]")).sendKeys("dan");
driver.findElement(By.cssSelector("input[name=\"3.1.1.5.1.5\"]")).click();
标签如下:
<input class="form-control LoginUsernameField" ... />
但它没有看到类属性....或者我可以手动执行此操作。
答案 0 :(得分:0)
Selenium查找唯一标识符以标识网页中的元素。 classNames
是一个非常不太理想的选择,因为它们通常不是唯一的。另一方面,Ids
和names
通常是唯一的。这可能是Selenium IDE未选择classNames
并选择其他标识符的原因。
Selenium IDE记录用户操作。您可以单击Selenium IDE的元素来识别它,这就是您获得driver.findElement().click()
的原因。
如果您想等待元素等待,可以尝试implicit wait
。
如果您想使用driver.findElement(By.className(str))
,您确定网页中只有一个元素与className
相关联吗?如果是这种情况,您可以手动修改webdriver代码以使用className
。