无法使用By.xpath查找元素

时间:2017-07-18 12:03:24

标签: java selenium

我在以下页面:URL

尝试使用以下webelement访问详细信息访问Send Inquiry Now按钮

element2 = (new WebDriverWait(driver, 10)).until(ExpectedConditions
                .visibilityOfElementLocated(By
                        .xpath("//input[@value='Send Inquiry Now']")));
        element2 = driver.findElement(By.xpath("//input[@value='Send Inquiry Now']"));

但是像

那样得到错误
Cannot locate an element using By.xpath: //input[@value='Send Inquiry Now']

为什么?

虽然xPath在我尝试使用FirePath时正在查找该元素。

3 个答案:

答案 0 :(得分:0)

请尝试以下代码:

WebDriverWait wait = new WebDriverWait(driver, 12);
wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//input[@value='Send Inquiry Now']")));
driver.findElement(By.xpath("//input[@value='Send Inquiry Now']")).click();

希望它会对你有所帮助。

答案 1 :(得分:0)

以下是您的问题的答案:

以下没有任何wait的代码块可以在我的终端点击Send Inquiry Now按钮正常工作:

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class Q45166267_Alibaba 
{
    public static void main(String[] args) 
    {
        System.setProperty("webdriver.gecko.driver", "C:\\Utility\\BrowserDrivers\\geckodriver.exe");
        WebDriver driver =  new FirefoxDriver();
        driver.manage().window().maximize();
        driver.get("https://message.alibaba.com/msgsend/contact.htm?spm=a2700.details.maonnacta.dmessage.35f27552gNzeS&action=contact_action&domain=1&id=60449828505&id_f=IDX1eJR5RAxxTgliuJtCjLiQK4LPSRmesIX8tQWEpFLhdsmyylMs_oCrTyvia2XxGXRQ&mloca=main_en_detail&tracelog=tracedetailfeedback&umidToken=Bf9569377c353a415c18b826024db1857");
        driver.findElement(By.xpath("//input[@value='Send Inquiry Now' and @type='submit']")).click();
    }
}
  

值得一提的是,网址加载需要一些时间,因此,如果您遇到ElementNotFound例外情况,则必须在ExplicitWaitExpectedConditions设置elementToBeClickable 1}}(而不是presenceOfElementLocated)如下:

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

public class Q45166267_Alibaba 
{
    public static void main(String[] args) 
    {
        System.setProperty("webdriver.gecko.driver", "C:\\Utility\\BrowserDrivers\\geckodriver.exe");
        WebDriver driver =  new FirefoxDriver();
        driver.manage().window().maximize();
        driver.get("https://message.alibaba.com/msgsend/contact.htm?spm=a2700.details.maonnacta.dmessage.35f27552gNzeS&action=contact_action&domain=1&id=60449828505&id_f=IDX1eJR5RAxxTgliuJtCjLiQK4LPSRmesIX8tQWEpFLhdsmyylMs_oCrTyvia2XxGXRQ&mloca=main_en_detail&tracelog=tracedetailfeedback&umidToken=Bf9569377c353a415c18b826024db1857");
        WebDriverWait wait10 = new WebDriverWait(driver, 10);
        WebElement element10 = wait10.until(ExpectedConditions.elementToBeClickable(By.xpath("//input[@value='Send Inquiry Now' and @type='submit']")));
        element10.click();
    }
}

如果这回答你的问题,请告诉我。

答案 2 :(得分:0)

我自己解决了我的问题。

实际上我在iframe里面访问文本区域。然后就在那之后,找到按钮"发送查询按钮"。哪个不在iframe中。

所以我首先使用以下方法切换到默认值:

driver.switchTo().defaultContent();

然后访问"立即发送询问"。哪个成功。