我可以使用Selenium获得此输入元素吗?

时间:2019-02-25 13:49:00

标签: java selenium automation

我是Selenium的新手。 我一直在寻找所有可能的方法来解决此问题(此刻我认为这是无法解决的),我有一个网页(无法共享),其中包含以下输入内容:

/html/body/table/tbody/tr[2]/td[2]/table/tbody/tr[3]/td/table/tbody/tr/td[2]/table/tbody/tr[2]/td/div/iframe/#document/html/body/div[2]/div/iframe/#document/html/frameset/frame/#document/html/frameset/frameset/frameset/frame/#document/html/body/div/form/table/tbody/tr[2]/td[2]/input

(如您所见,结构混合了框架,iframe和框架集;其中一些具有id,而其他名称则没有)

  

问题是Selenium无法通过任何方法找到元素   测试过

。首先,我尝试了一个简单的driver.findElement(By。all of them

在他们不工作之后,我开始在网络上浏览并且找不到为什么我无法解决这个问题。

这是网页中唯一的输入,并且具有id作为属性,因此应该很容易。

This is the class where I have been trying to make it work如果您想查看我失败的工作,我将最后的努力集中在尝试次数8上。

正如您所看到的,我一直在尝试通过几种方式来获得它,框架确实是一个问题,但这不是它们,也不是等待。

  

真的没有办法获得这个元素吗?是其中一种情况   硒不能在哪里自动化?或者是我丢失了一些东西。

对象是可见的,甚至没有滚动条,整个页面完全适合屏幕,Xpath是我测试的第一选择之一,没有用

谢谢。

2 个答案:

答案 0 :(得分:0)

我不知道这是否是问题,但是您尝试使用的元素是可见的还是需要滚动才能查看?如果看不见,请尝试使用它滚动一点:

JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("window.scrollBy(0,1000)");

另一种可能的解决方案是尝试使用绝对xpath而不是相对的。有几种工具可以找到html页面中元素的绝对xpath。然后您可以使用

driver.findElement(By.xpath(absoluteXpath));

答案 1 :(得分:0)

经过大量尝试,我意识到硒在最后一个switchTo切换到另一个帧。这可能是一个错误,但是我修改了最后一次切换到而不是

的方式
    var wait = (new WebDriverWait(driver, secsToWait));
    wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(frameNameOrId));

收件人

    driver.switchTo().frame(driver.findElement(By.xpath("//frame[@"+attribute+"='"+frameNameOrId+"']")));

因此它终于可以正常工作并正常获取输入了。