Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法使用By.xpath查找元素_Java_Selenium - Fatal编程技术网

Java 无法使用By.xpath查找元素

Java 无法使用By.xpath查找元素,java,selenium,Java,Selenium,我在下一页: 尝试使用以下webelement访问详细信息访问立即发送查询按钮 element2 = (new WebDriverWait(driver, 10)).until(ExpectedConditions .visibilityOfElementLocated(By .xpath("//input[@value='Send Inquiry Now']"))); element2 = driv

我在下一页:

尝试使用以下webelement访问详细信息访问
立即发送查询
按钮

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']
为什么?

尽管在尝试通过FirePath时xPath正在定位元素。

请尝试以下代码:

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();

希望对您有所帮助。

以下是您问题的答案:

下面的代码块没有任何
等待
功能,在我这里单击
立即发送查询
按钮可以正常工作:

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();
    }
}
值得一提的是,加载URL需要较长的时间,因此如果遇到
ElementNotFound
异常,您必须使用
ExpectedConditions
elementtobelickable
(而不是
presenceOfElementLocated
)设置为
elementtobelickable
,如下所示:


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

我自己已经解决了问题

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

因此,我首先使用以下命令切换到默认值:

driver.switchTo().defaultContent();

然后访问“立即发送查询”。成功运行。

您确定在第一行中得到的是此异常而不是timedoutException。您能给出整个异常日志吗?您得到的是超时异常吗?这是全部异常日志:警告:findElement引发的WebDriverException(by.xpath://input[@value='Send Inquiry Now'和@type='submit'])org.openqa.selenium.NoSuchElementException:无法使用By.xpath://input[@value='Send Inquiry Now'和@type='submit']驱动程序信息找到元素:Driver.version:unknown位于org.openqa.selenium.support.ui.ExpectedConditions.lambda$findElement$0(ExpectedConditions.java:896)位于java.util.Optional.orelsetrow(未知源代码)在org.openqa.selenium.support.ui.ExpectedConditions.findelelement(ExpectedConditions.java:895)而不是presence,使用visible或clickable。存在只是意味着它在DOM中,如果它还不可见/不可单击,仍然可能导致问题。我的一般规则是,如果要单击该元素,则等待clickable,如果不使用visible。此外,
wait.until()
返回等待的元素,以便您只需执行
wait.until(…)。单击()。按照你写的方式,你实际上是在刮纸,直到它在那里。。。然后你再刮一次页面来点击它。我没有投反对票,但代码答案在很多时候不是很有用。如果你花一分钟来解释你的代码是做什么的,以及为什么它会回答这个问题,那就更好了。这对我来说是行不通的。我猜原因是你直接点击了这个页面,但我现在正在导航到这个页面,然后点击联系供应商,我在这个页面上点击“立即发送询价”按钮。尽管我可以成功访问iframe中的数量字段和消息区域元素。但不幸的是,没有“立即发送查询”按钮。
driver.switchTo().defaultContent();