Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.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
C# 如何使用PhantomJS和Selenium单击离子按钮_C#_Selenium_Xpath_Phantomjs_Webdriverwait - Fatal编程技术网

C# 如何使用PhantomJS和Selenium单击离子按钮

C# 如何使用PhantomJS和Selenium单击离子按钮,c#,selenium,xpath,phantomjs,webdriverwait,C#,Selenium,Xpath,Phantomjs,Webdriverwait,我们有一个第三方供应商,需要向我们提供实时数据,但没有任何数据接口。解决方案是将网站数据镜像到我们的系统。他们的网站是用爱奥尼亚建造的 我已经创建了镜像数据的功能。我目前的问题是,实时数据位于不同的页面上,但URL不会仅更改页面的源。我目前无法获取实时数据,因为我必须单击主页上的“实时数据”按钮 我曾使用PhantomJS尝试以编程方式单击按钮,但由于某些原因,它不想工作。使用Google主页测试了该功能,并且工作正常 有人知道我做错了什么或错过了什么吗?我尝试过类名、标记名和dom中的大多数元

我们有一个第三方供应商,需要向我们提供实时数据,但没有任何数据接口。解决方案是将网站数据镜像到我们的系统。他们的网站是用爱奥尼亚建造的

我已经创建了镜像数据的功能。我目前的问题是,实时数据位于不同的页面上,但URL不会仅更改页面的源。我目前无法获取实时数据,因为我必须单击主页上的“实时数据”按钮

我曾使用PhantomJS尝试以编程方式单击按钮,但由于某些原因,它不想工作。使用Google主页测试了该功能,并且工作正常

有人知道我做错了什么或错过了什么吗?我尝试过类名、标记名和dom中的大多数元素,但仍然没有成功

这是网站的源代码和我的PhantomJS代码

PS该网站是一个本地设备接口,我正在使用保存的HTML代码进行测试

网站按钮源

<button class="item item-block item-md" ion-item="" menuclose=""><ion-icon color="primary" item-left="" role="img" class="icon icon-md icon-md-primary ion-md-home item-icon" aria-label="home"></ion-icon><div class="item-inner"><div class="input-wrapper"><!----><ion-label class="label label-md">

                Home
            </ion-label></div><!----></div><div class="button-effect"></div></button><button class="item item-block item-md" ion-item="" menuclose=""><ion-icon color="primary" item-left="" role="img" class="icon icon-md icon-md-primary ion-md-list item-icon" aria-label="list"></ion-icon><div class="item-inner"><div class="input-wrapper"><!----><ion-label class="label label-md">

                Live Data
            </ion-label></div><!----></div><div class="button-effect"></div></button><button class="item item-block item-md" ion-item="" menuclose=""><ion-icon color="primary" item-left="" role="img" class="icon icon-md icon-md-primary ion-md-analytics item-icon" aria-label="analytics"></ion-icon><div class="item-inner"><div class="input-wrapper">

要单击文本为Live Data的所需元素,您需要诱导WebDriverWait,并且可以使用以下解决方案:

  • XPath

    new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementToBeClickable(By.XPath("//button[@class='item item-block item-md']//ion-label[@class='label label-md' and normalize-space()='Live Data']"))).Click();
    

我使用的是通用的PhantomJSDriver和特定的浏览器驱动程序

使用ChromeDriver并在浏览器中打开网站,它现在正在工作。我能够以编程方式单击按钮并转到正确的源代码

另外,我试图按下的按钮在侧菜单中,不可见。使用了中心的一个元素,这使它工作起来


我确信您可以在不打开浏览器的情况下执行此操作,但现在,这将使功能正常工作。

您100%确定要单击的按钮是页面上的第二个按钮吗?是否有一个更具体的选择器,您可以使用它来更加确定?该按钮是在HTML中,还是在通过JS加载初始HTML后加载?请更新您的问题,以显示从
查看源代码
检索到的HTML。谢谢,我尝试了此解决方案,但运气不佳,但我认为这是因为该按钮位于侧栏菜单中,并且不可见。
new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementToBeClickable(By.XPath("//button[@class='item item-block item-md']//ion-label[@class='label label-md' and normalize-space()='Live Data']"))).Click();