Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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 使用selenium单击文本链接_Java_Eclipse_Selenium_Selenium Chromedriver - Fatal编程技术网

Java 使用selenium单击文本链接

Java 使用selenium单击文本链接,java,eclipse,selenium,selenium-chromedriver,Java,Eclipse,Selenium,Selenium Chromedriver,我可以使用selenium单击链接,但它会为我打开一个新选项卡,而不是在同一选项卡中打开,并且它只显示数据;在地址栏中,而不是页面中的内容 公共类InternetExplorerDriverTest{ public static void clickLinkByHref(String href) { WebDriver driver = new ChromeDriver(); List<WebElement> anchors = driver.findElement

我可以使用selenium单击链接,但它会为我打开一个新选项卡,而不是在同一选项卡中打开,并且它只显示数据;在地址栏中,而不是页面中的内容

公共类InternetExplorerDriverTest{

 public static void clickLinkByHref(String href) {
    WebDriver driver = new ChromeDriver();
    List<WebElement> anchors = driver.findElements(By.tagName("a"));
    Iterator<WebElement> i = anchors.iterator();

    while(i.hasNext()) {
        WebElement anchor = i.next();
     if(anchor.getAttribute("href").contains(href)) {

         anchor.click();
         break;
        }
    }
}


public static void main(String[] args) {
WebDriver driver = new ChromeDriver();
 driver.get("https://url");
 driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
WebElement element =       

driver.findElement(By.id("323bb07bc611227a018aea9eb8f3b35e"));
 element.click();

 clickLinkByHref("ea7d96126f92a100f3ae60526e3ee4e0");
publicstaticvoid-clickLinkByHref(stringhref){
WebDriver驱动程序=新的ChromeDriver();
列表锚=driver.findElements(按.tagName(“a”));
迭代器i=anchors.Iterator();
while(i.hasNext()){
WebElement anchor=i.next();
if(anchor.getAttribute(“href”).contains(href)){
anchor.click();
打破
}
}
}
公共静态void main(字符串[]args){
WebDriver驱动程序=新的ChromeDriver();
驱动程序。获取(“https://url");
driver.manage().timeouts().implicitlyWait(5,TimeUnit.SECONDS);
WebElement元素=
驱动程序文件(由id(“323bb07bc611227a018aea9eb8f3b35e”);
元素。单击();
单击LinkByHREF(“ea7d96126f92a100f3ae60526e3ee4e0”);
}

}

eclipse中的控制台显示如下“2分钟后”

Exception in thread "main" org.openqa.selenium.WebDriverException: unknown error: Chrome failed to start: crashed
  (Driver info: chromedriver=2.25.426923 (0390b88869384d6eb0d5d09729679f934aab9eed),platform=Windows NT 6.1.7601 SP1 x86) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 61.87 seconds
Build info: version: '2.39.0', revision: 'ff23eac', time: '2013-12-16 16:12:12'
System info: host: 'NLLR4000290859', ip: '10.29.137.219', os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.6.0_31'
Driver info: org.openqa.selenium.chrome.ChromeDriver
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:193)
    at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:145)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:554)
    at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:216)
    at org.openqa.selenium.chrome.ChromeDriver.startSession(ChromeDriver.java:182)
    at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:111)
    at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:115)
    at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:161)
    at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:150)
    at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:107)
    at InternetExplorerDriverTest.clickLinkByHref(InternetExplorerDriverTest.java:41)
    at InternetExplorerDriverTest.main(InternetExplorerDriverTest.java:94)
线程“main”org.openqa.selenium.WebDriverException中的异常:未知错误:Chrome启动失败:崩溃
(驱动程序信息:chromedriver=2.25.426923(0390b88869384d6eb0d5d09729679f934aab9eed),平台=Windows NT 6.1.7601 SP1 x86)(警告:服务器未提供任何堆栈跟踪信息)
命令持续时间或超时:61.87秒
构建信息:版本:“2.39.0”,修订版:“ff23eac”,时间:“2013-12-16 16:12:12”
系统信息:主机:'NLLR4000290859',ip:'10.29.137.219',os.name:'Windows 7',os.arch:'x86',os.version:'6.1',java.version:'1.6.0_31'
驱动程序信息:org.openqa.selenium.chrome.ChromeDriver
位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance(未知源)
位于sun.reflect.delegatingConstructor或AccessorImpl.newInstance(未知源)
位于java.lang.reflect.Constructor.newInstance(未知源)
位于org.openqa.selenium.remote.ErrorHandler.CreateTrowable(ErrorHandler.java:193)
位于org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:145)
位于org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:554)
位于org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:216)
位于org.openqa.selenium.chrome.ChromeDriver.startSession(ChromeDriver.java:182)
位于org.openqa.selenium.remote.RemoteWebDriver。(RemoteWebDriver.java:111)
位于org.openqa.selenium.remote.RemoteWebDriver。(RemoteWebDriver.java:115)
位于org.openqa.selenium.chrome.ChromeDriver(ChromeDriver.java:161)
位于org.openqa.selenium.chrome.ChromeDriver(ChromeDriver.java:150)
位于org.openqa.selenium.chrome.ChromeDriver(ChromeDriver.java:107)
在InternetExplorerDriverTest.clickLinkByHref(InternetExplorerDriverTest.java:41)上
位于InternetExplorerDriverTest.main(InternetExplorerDriverTest.java:94)

试着回顾一下这个例子:

另外,您的链接目标是否可能为空

下面是一个简单的例子:

包org.mitre.tests

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

public class Wtest {
    public static void main(String[] args) {
        try {
            System.setProperty("webdriver.chrome.driver", "exe\\chromedriver.exe");
            WebDriver driver = new ChromeDriver();
            driver.get("http://www.w3schools.com/");
            Thread.sleep(500);
            WebElement text_link = driver.findElement(By.linkText("Learn HTML"));
            text_link.click();
            Thread.sleep(5000);
            driver.quit();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("done.");
    } //end main()
}

试着回顾一下这个例子:

另外,您的链接目标是否可能为空

下面是一个简单的例子:

包org.mitre.tests

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

public class Wtest {
    public static void main(String[] args) {
        try {
            System.setProperty("webdriver.chrome.driver", "exe\\chromedriver.exe");
            WebDriver driver = new ChromeDriver();
            driver.get("http://www.w3schools.com/");
            Thread.sleep(500);
            WebElement text_link = driver.findElement(By.linkText("Learn HTML"));
            text_link.click();
            Thread.sleep(5000);
            driver.quit();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("done.");
    } //end main()
}

我重新表述我的问题:上一个问题是因为我再次初始化chromedriver。 因此,这次我将驱动程序对象传递给方法

现在我注意到我试图点击的链接根本没有被识别。 chrome中的开发者工具向我展示了如下结构中的链接:

 <main 
     <div
      <ifreame
        #document
          <html
            <body
              <form
                 <div
                     ::before
                   <a href=wizard_view.do?sys_action=sysverb_wizard_ans&WIZARD:action=follow&wiz_referring_url=&wiz_collection_key=&wiz_collectionID=&wiz_collection=&wiz_collection_related_field=&wiz_view=&wiz_action=sysverb_new&sys_id=ea7d96126f92a100f3ae60526e3ee4e0&sysparm_query=active=true&sysparm_target=&sys_target=change_ddfdff>Standard (from Template)

</a>
::after
</div>
....

还有10个具有相同类名的div部分,每个部分都是文本链接。我想点击其中一个(见上文)

我正在重新表述我的问题:上一个问题是因为我再次初始化chromedriver。 因此,这次我将驱动程序对象传递给方法

现在我注意到我试图点击的链接根本没有被识别。 chrome中的开发者工具向我展示了如下结构中的链接:

 <main 
     <div
      <ifreame
        #document
          <html
            <body
              <form
                 <div
                     ::before
                   <a href=wizard_view.do?sys_action=sysverb_wizard_ans&WIZARD:action=follow&wiz_referring_url=&wiz_collection_key=&wiz_collectionID=&wiz_collection=&wiz_collection_related_field=&wiz_view=&wiz_action=sysverb_new&sys_id=ea7d96126f92a100f3ae60526e3ee4e0&sysparm_query=active=true&sysparm_target=&sys_target=change_ddfdff>Standard (from Template)

</a>
::after
</div>
....
还有10个具有相同类名的div部分,每个部分都是文本链接。我想点击其中一个(见上文)

切换到iframe需要上面的代码行。现在可以了

切换到iframe需要上面的代码行。现在可以了