【问题标题】:Unable to get Xpath for an input tag on a form无法为表单上的输入标签获取 Xpath
【发布时间】:2017-04-04 15:46:51
【问题描述】:

我无法为带有Selenium 的输入文件获取Xpath。 这是screenshot(标记的)。

【问题讨论】:

  • 为什么无法获取xpath?你试过什么?这工作//input[@name='file'] 吗?图片链接过时了,有些人无法在他们的网络上查看它们。如果可能,请将 html 放在问题中。干杯:)
  • 我试过这个..它不起作用。我必须点击浏览按钮上传文件

标签: selenium text input


【解决方案1】:

由于您想要的元素位于iframe 中,因此您必须将 selenium 的焦点切换到 iframe,然后使用 xpath 获取元素。

JAVA

要切换到 iframe,请使用

driver.switchTo().frame("uploadFile"); // used iframe's id as locator inside frame()

然后,要获取输入元素,请使用 xpath //input[@name='file']

在完成与此 iframe 的交互后,不要忘记离开 iframe。要导航到默认框架,请使用driver.switchTo().defaultContent();

【讨论】:

  • 赞成注意到iframe。不确定 OP 使用的是什么语言,但这必须通过任何绑定或selenium-ide 来完成
  • 是的,我的方法对Java有效,OP没有提到问题是什么语言。
  • driver.switchTo().frame("/sourcing_sit19/loan/uploadImportLoans.pe"); driver.findElement(By.xpath("//input[@name='file']"));
  • 哎呀,试试frame()里面的id "uploadFile"而不是src
  • 我在 Java 中使用 selenium
【解决方案2】:

您的html代码中有一个框架,首先您必须切换到该框架。

WebDriver 的driver.switchTo().frame() 方法采用三个可能的参数之一:

  • 一个数字。

通过(从零开始的)索引选择帧。也就是说,如果一个页面有三个 帧,第一帧将在索引 0,第二帧在索引 1 和 第三个在索引 2。一旦选择了框架,所有后续 WebDriver 接口上的调用是针对该框架进行的。

  • 名称或 ID。

按名称或 ID 选择框架。按匹配名称定位的框架 属性总是优先于那些通过 ID 匹配的。

  • 以前发现的 WebElement。

使用之前定位的 WebElement 选择一个框架。

通过它的 id/name 获取框架或通过 driver.findElement() 找到它,你会很好的。

  • 然后您可以使用下面的 cssSelector 对输入标签执行任何操作:

driver.findElement(By.cssSelector("input[name=file]"));

并且在执行您的操作后不要忘记将其切换到默认框架:

driver.switchTo().defaultContent();

异常处理 您可以使用下面的代码等待警报出现 30 秒,一旦出现警报,您就可以轻松接受它。

try {
    WebDriverWait waitAlert = new WebDriverWait(wb, 30);
    waitAlert.until(ExpectedConditions.alertIsPresent());
    wb.switchTo().alert().accept();
} catch (Exception e) {
    logger.info("Alert Didn't Come");
}

如果有帮助,请告诉我。

【讨论】:

  • driver.findElement(By.cssSelector("input[name=file]"));没用
  • 在对该帧执行一些操作后,我使用了 driver.switchTo().defaultContent();但我收到一个错误模态对话框存在
  • 添加了异常处理。
【解决方案3】:

试试下面的代码。

//Going inside of the iframe
driver.switchTo().frame("uploadFile");

//Getting file input webelement
WebElement input=driver.findElement(By.xpath("//form[@name='fileUploadFrm']//input[@name='file']"));

//Sending file path using sendkeys method
input.sendKeys("filepath");

//Switch back to default
driver.switchTo().defaultContent();

异常处理:当出现警报并且我们没有处理它时,将抛出模态对话框存在异常。如果在您操作后没有每次都出现警报。

try { 
Alert alert = driver.switchTo().alert();
alert.accept();
//if alert present, accept and move on.
 }
catch (NoAlertPresentException e) {
//do what you normally would if you didn't have the alert.
 }

让我知道它是否适合你

【讨论】:

  • driver.switchTo().defaultContent()
  • driver.switchTo().defaultContent() 在此之后我得到一个异常模态对话框:
猜你喜欢
  • 1970-01-01
  • 2021-06-01
  • 2012-03-17
  • 1970-01-01
  • 2016-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多