Java 无法使用By.xpath查找元素
我在下一页: 尝试使用以下webelement访问详细信息访问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
立即发送查询
按钮
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();