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-SeleniumWebDriver从搜索结果中查找元素_Java_Selenium_Webdriver - Fatal编程技术网

步骤定义Java-SeleniumWebDriver从搜索结果中查找元素

步骤定义Java-SeleniumWebDriver从搜索结果中查找元素,java,selenium,webdriver,Java,Selenium,Webdriver,我是使用Java的Selenium Webdriver自动化新手,还在学习 在我的步骤定义RetailTakePayment.java类中,我试图查找包含特定文本的元素,该文本显示在弹出窗口的搜索结果中,但由于某些原因,我无法找到并单击它。我四处寻找,运气不太好。因此,发布我的问题以获得一些指导 我希望这些帮助 Salesforce页面车辆查找: 弹出-查找搜索结果: 我的HTML: 我的HTML中有两个框架: 我的步骤定义: @Given("^user complete payment

我是使用Java的Selenium Webdriver自动化新手,还在学习

在我的步骤定义RetailTakePayment.java类中,我试图查找包含特定文本的元素,该文本显示在弹出窗口的搜索结果中,但由于某些原因,我无法找到并单击它。我四处寻找,运气不太好。因此,发布我的问题以获得一些指导

我希望这些帮助

Salesforce页面车辆查找:

弹出-查找搜索结果:

我的HTML:

我的HTML中有两个框架:

我的步骤定义:

@Given("^user complete payment precheck$")
    public void user_complete_payment_precheck() throws Throwable {

        // inserting installer and preferred date
        driver.findElement(By.id("page:frm:main:jobsInfo:jobsRepeat2:0:j_id164")).sendKeys("Test");
        driver.findElement(By.xpath("/html/body/div[1]/div[2]/table/tbody/tr/td[2]/form/div[1]/div/div/div/div[2]/div[5]/div[2]/table/tbody/tr[1]/td/table/tbody/tr/td[4]/span/span")).click();

        // searching and selecting vehicle
        // click on lookup
        driver.findElement(By.xpath("//img[@alt='Vehicle Lookup (New Window)']")).click();
        Thread.sleep(2000);

        // window switch handler    
        String parentWindowHandler = driver.getWindowHandle();
        String subWindowHandler = null;

                Set<String> handles = driver.getWindowHandles();
                Iterator<String> iterator = handles.iterator();
                while (iterator.hasNext()) {
                    subWindowHandler = iterator.next();
                }
                driver.switchTo().window(subWindowHandler);

        // switch by frame
        driver.switchTo().frame(0);

        // searching - this worked!!!
        driver.findElement(By.xpath("//form[@id='theForm']/div/div[2]/input")).sendKeys("autod2018");
        Thread.sleep(1000);
        driver.findElement(By.name("go")).click();
        Thread.sleep(2000);

        // searching for vehicle - STILL NOT WORKING....
        driver.findElement(By.xpath("//div[contains(text(),'BMW-1 SERIES-AUTOd2018')]")).click();      
        // driver.findElement(By.xpath("/html/body/div[1]/div[3]/div/div/div[2]/div/div[2]/table/tbody/tr[2]/th/a")).click();

        // switching back to the parent window - works!
        driver.switchTo().window(parentWindowHandler);

        // save record
        driver.findElement(By.xpath("/html/body/div[1]/div[2]/table/tbody/tr/td[2]/form/div[1]/div/div/div/div[1]/table/tbody/tr/td[2]/input[1]")).click();


    }
尝试了其他xpath,但全部失败:

//valid xpath-1 - from ranorex selocity - didnt work
driver.findElement(By.xpath("/html//div[@id='Vehicle__c_body']/table[@class='list']//a[@href='#']")).click();

//valid xpath-2 - custom xpath - didn't work
driver.findElement(By.xpath("//*[text()='BMW-1 SERIES-AUTOd2018']")).click();

//valid xpath-3 - from chrome - didn't work
driver.findElement(By.xpath("//*[@id=\"Vehicle__c_body\"]/table/tbody/tr[2]/th/a")).click();

//valid xpath 4 - from firefox - didn't work
driver.findElement(By.xpath("/html/body/div/div[3]/div/div/div[2]/div/div[2]/table/tbody/tr[2]/th/a")).click();
尝试:

当前代码正在查找div元素:

driver.findElement(By.xpath("//**div**[contains(text(),'BMW-1 SERIES-AUTOd2018')]")).click();
提供的html有一个元素名

<a...>BMW-1 SERIES-AUTOd2018< /a>

因为搜索表单和结果表位于不同的框架中,所以在与其中的元素交互之前,需要切换到相应的框架

 // switch to search form frame
 driver.switchTo().frame(0);

 // enter search keywords and click go
 ...

 // switch back to topmost frame in the current window.
 // this is very important, you can't directly switch to result table frame
 // from search form frame ( because it's not includes the result table frame).
 // Most of time, we back to the top frame, then jump into other frame.
 driver.switchTo().defaultContent();

 // then switch to result table frame
 driver.switchTo().frame(<index_or_name_of_result_table_frame>);

这意味着xpath不正确。您可以显示您试图定位的元素的html检查吗?您的XPath不正确。请显示您的html,以便我们可以轻松解决您的问题。谢谢,我已经添加了html的快照。您可以在键入搜索词之前切换到框架:driver.switchTo.frame0;,如果搜索结果表与搜索表单不在同一帧中,则需要切换到结果表所在的正确帧。Hi@yong,我首先切换是因为我在子帧中搜索单词。我想我以前尝试过这个方法,刚刚又做了一次,仍然找不到:org.openqa.selenium.NoSuchElementException:没有这样的元素:找不到元素:{method:xpath,selector://a[containstext,'AUTOd2018']}您在firebug中测试过xpath吗。Chrome开发者控制台运行以下命令:document.evaluate//p[containstext,'AUTOd2018',document,null,XPathResult.ANY_类型,null.iterateNextNo。不幸的是,在我的测试环境中,firefox v62 firebug不兼容。尝试firefox开发者控制台我没有机会在firefox开发者控制台中尝试它们,但我测试的那个已经过验证,我刚刚将它们添加到描述中Hi Yong,你是对的。搜索结果在单独的框架中。有两个框架“searchFrame”和“resultsFrame”。我必须切换到driver.switchTo.frame0;或driver.switchTo.framesearchFrame;在我搜索之前。但由于某些原因,我现在无法切换到结果框架。有什么建议吗?这很有效!不过我不能投票。谢谢你,杨首先切换到搜索帧驱动程序。切换到。帧搜索帧;//然后切换到最顶层的帧驱动程序。切换到。默认内容;//最后切换到结果帧驱动程序.switchTo.frameresultsFrame;如果这是您期望的答案,请接受作为您的问题答案。
<a...>BMW-1 SERIES-AUTOd2018< /a>
 // switch to search form frame
 driver.switchTo().frame(0);

 // enter search keywords and click go
 ...

 // switch back to topmost frame in the current window.
 // this is very important, you can't directly switch to result table frame
 // from search form frame ( because it's not includes the result table frame).
 // Most of time, we back to the top frame, then jump into other frame.
 driver.switchTo().defaultContent();

 // then switch to result table frame
 driver.switchTo().frame(<index_or_name_of_result_table_frame>);