是否有用于记录seleniumn2的Web浏览器事件的工具?

时间:2014-07-02 04:10:55

标签: selenium-webdriver

我正在寻找一些非常简单的东西。它可以使用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" ... />

但它没有看到类属性....或者我可以手动执行此操作。

1 个答案:

答案 0 :(得分:0)

  1. Selenium查找唯一标识符以标识网页中的元素。 classNames是一个非常不太理想的选择,因为它们通常不是唯一的。另一方面,Idsnames通常是唯一的。这可能是Selenium IDE未选择classNames并选择其他标识符的原因。

  2. Selenium IDE记录用户操作。您可以单击Selenium IDE的元素来识别它,这就是您获得driver.findElement().click()的原因。

  3. 如果您想等待元素等待,可以尝试implicit wait

  4. 如果您想使用driver.findElement(By.className(str)),您确定网页中只有一个元素与className相关联吗?如果是这种情况,您可以手动修改webdriver代码以使用className