我的道歉是因为这个问题很长。
更具体地说,我试图点击第4行显示的铅笔图标(编辑按钮)
这是我试图执行的代码:
WebElement ele = driver.findElement(By.xpath("//a[contains(@title, 'Edit Row')]"));
JavascriptExecutor executor = (JavascriptExecutor)driver;
Executor1.executeScript("arguments[0].click();", ele);
运行selenium代码后,驱动程序实际上单击了第1行(Administration | NA)的Edit按钮而不是第4行。我发现不仅第一行而且其他行也有相同的HTML代码,唯一的区别是铅笔/编辑按钮被隐藏,因为我不是那个创建该行值的人。
我也尝试过以下代码:
driver.findElement(By.xpath("//a[contains(@title, 'Edit Row')]")).click();
然后我收到了错误
element is not currently visible and so may not be interacted with
看起来驱动程序仍在查看第一行中隐藏的“编辑”按钮,而不是第4行中明显可见的按钮。
无论如何,我可以根据值而不是行号点击“编辑”按钮吗?原因是,在将来,我输入的测试值可能不会在第4行,但在第1行或第10行结束。
最后但并非最不重要的是,我的Safari似乎无法运行JS Executor代码,每次我给它一个去,返回以下错误:
org.openqa.selenium.WebDriverException: 'undefined' is not a function (WARNING: The server did not provide any stacktrace information)
有人可以为我揭开这一点吗?
干杯
答案 0 :(得分:1)
由于只显示了一个编辑图标,因此下面的代码可以正常工作。
driver.findElement(By.cssSelector("a[title='Edit Row']")).click();
我认为你遇到隐藏元素问题的原因是你使用JSE点击它。 Selenium旨在仅与可见的元素进行交互......用户的方式。 JSE允许您与不可见的元素进行交互。有理由使用JSE,但我不相信这是其中之一。使用JSE,您发现了一个与您的XPath不匹配的元素,然后尝试点击它...因此错误。
答案 1 :(得分:0)
您应该根据字段文本找到该元素,以便它可以找到相应的编辑链接。
functional_area = "Business Development / Innovation"
WebElement ele = driver.findElement(By.xpath("//span[@class='xspTextComputedField'][contains(@text, '" + functional_area + "')]/following-sibling::div/a[contains(@title, 'Edit Row')]"));
您可以通过参数化文本ex使其更具动态性。金融。
答案 2 :(得分:0)
我建议你在firefox中使用一次,然后使用firepath附加组件在firebug中尝试相同的xpath。
尝试检查铅笔图标的xpath。只有一个没有动态值的加工元素,那么你可以使用它。否则评估这个xapth
//a[contains(@title, 'Edit Row')]
您可以找到一个或多个匹配元素。然后尝试找到所需元素的属性之一的差异。如果你能够通过使用那个奇怪的属性来创建xpath,那么它的on on会转到List并在循环中交叉,然后对它进行处理。
答案 3 :(得分:0)
感谢murali和JeffC的建议,我设法让驱动程序点击显示的铅笔:
List<WebElement> EditButtons = driver.findElements(By.cssSelector("a[title='Edit Row']"));
for(WebElement button : EditButtons) {
if(button.isDisplayed()) {
button.click();
}
}
虽然它只解决了一半的问题,但我试图根据旁边的值点击显示的“编辑”按钮。如果我创建了另一行,其值为'Test234',并且该行位于第4行下,则不会点击'Test234'的编辑按钮。有什么建议吗?我试过这个,但它似乎不起作用,驱动程序仍然点击它看到的第一个可见的编辑按钮:
List<WebElement> EditButtons = driver.findElements(By.cssSelector("a[title='Edit Row']"));
String textvalue = driver.findElement(By.xpath("//span[contains(text(),'test456')]")).getText();
for(WebElement button : EditButtons) {
if(button.isDisplayed() && textvalue.equalsIgnoreCase("test456")) {
button.click();
}
}
更新:好的,问题解决了,我换回使用xpath而不是cssSelector,然后稍微修改了Vagnesh的建议(感谢Vagnesh !!),现在驱动程序点击我搜索的文本旁边的可见编辑按钮没有经过循环
driver.findElement(By.xpath("//span[contains(text(), 'Enter my desired Text here')]/following::div//a[contains(@title,'Edit Row')]")).click();