无法通过Xpath单击元素,但可以通过ID找到它

时间:2015-10-30 10:54:43

标签: java eclipse selenium xpath

我试图删除表中的每一行,直到没有剩下,只有那时我才想继续我的测试用例的其余部分。出于这个原因,我正在使用if / else语句。作为此声明的一部分,我需要选择第一行,单击删除按钮,然后单击确定确认我的操作。问题出在最后一次行动中。我可以通过findElement by.id找到 OK ,但不能通过类和文本值找到。问题是ID仅在删除第一行时可靠,因为应用程序使用自动生成的ID's。这就是为什么我试图通过它的类和文本值找到 OK

if(driver.findElement(By.xpath("first row of the table")) != null)
        {
            driver.findElement(By.xpath("first row of the table")).click(); //select row
            driver.findElement(By.xpath("//*[@type='button' and text()='Delete']")).click(); //click delete button
            wait.until(ExpectedConditions.elementToBeClickable(By.id("ext-gen483"))); //wait untill the OK button (id=ext-gen483) in dialog box is visible to confirm delete
/** this section is built in to find out why I cant find the OK button. First I catch and print the class and text for the OK button via the id. */
            String Klasis = driver.findElement(By.id("ext-gen483")).getAttribute("Class");
            System.out.println("Value of Class = "+Klasis);
            String Tekstis = driver.findElement(By.id("ext-gen483")).getText();
            System.out.println("Value of  Text = "+Tekstis);
            String xpathOK = "//*[@class='"+Klasis+"'"+" and text()='"+Tekstis+"']";
            System.out.println(xpathOK);
            driver.findElement(By.xpath(xpathOK)).click();
        }
else

打印操作导致:

Value of Class =  x-btn-text
Value of  Text = OK
//*[@class=' x-btn-text' and text()='OK']

但是无法点击按钮:ElementNotVisibleException:元素当前不可见,因此可能无法与

进行交互

但是,如果我使用以下代码单击确定,它可以正常工作:

driver.findElement(By.id("ext-gen483")).click();

这是代表OK按钮的代码行:

<button class=" x-btn-text" id="ext-gen483" type="button">OK</button>

由于建议类中的额外空间可能会影响我更改代码的方式,以便它不再使用类而是按钮属性:

            String Klasis = driver.findElement(By.id("ext-gen483")).getAttribute("Class");
            System.out.println("Value of Class = "+Klasis);
            String Tekstis = driver.findElement(By.id("ext-gen483")).getText();
            System.out.println("Value of  Text = "+Tekstis);
            String Typeis = driver.findElement(By.id("ext-gen483")).getAttribute("Type");
            System.out.println("Value of  Type = "+Typeis);
            String xpathOK = "//*[@type='"+Typeis+"'"+" and text()='"+Tekstis+"']";
            System.out.println(xpathOK);
            //driver.findElement(By.id("ext-gen483")).click();
            driver.findElement(By.xpath(xpathOK)).click();

打印操作导致:

Value of Class =  x-btn-text
Value of  Text = OK
Value of  Type = button
//*[@type='button' and text()='OK']

但它在最后一行仍然失败并显示相同的消息:ElementNotVisibleException:元素当前不可见,因此可能无法与

进行交互

修改

有2个按钮符合我的findelement语句。如果我然后选择点击第二个它的工作原理!

List<WebElement> listOfOKbut = driver.findElements(By.xpath("//*[@class=' x-btn-text' and text()='Ja']")); 
System.out.println("aantal ja knoppen:"+listOfOKbut.size()); if(listOfOKbut.size() >= 2) { 
  listOfOKbut.get(1).click();
}

2 个答案:

答案 0 :(得分:0)

尝试使用contains代替&#34; =&#34;对于@class部分:

String xpathOK = "//*[contains(@class,'x-btn-text') and text()='OK']";

答案 1 :(得分:0)

要更准确地找到元素,请使用以下方法

  1. String xpath = "//button[contains(@class,'x-btn-text') and text()='OK']"
  2. 找到class or id为常量的按钮的父元素。   xpath = "//parent//button[contains(@class,'x-btn-text') and text()='OK']"