在本文中,您将会了解到关于如何使用Selenium和Java提取表元素的id属性的动态值的新资讯,同时我们还将为您解释selenium获取动态元素的相关在本文中,我们将带你探索如何使用Selenium
在本文中,您将会了解到关于如何使用Selenium和Java提取表元素的id属性的动态值的新资讯,同时我们还将为您解释selenium获取动态元素的相关在本文中,我们将带你探索如何使用Selenium和Java提取表元素的id属性的动态值的奥秘,分析selenium获取动态元素的特点,并给出一些关于Java Selenium如何使用sendkeys上传文件、javascript – 如何使用Selenium WebDriver访问动态添加的iframe?、javascript – 如何使用selenium获取CSS选择器的所有元素的直接子代?、RSelenium和Javascript的实用技巧。
本文目录一览:- 如何使用Selenium和Java提取表元素的id属性的动态值(selenium获取动态元素)
- Java Selenium如何使用sendkeys上传文件
- javascript – 如何使用Selenium WebDriver访问动态添加的iframe?
- javascript – 如何使用selenium获取CSS选择器的所有元素的直接子代?
- RSelenium和Javascript
如何使用Selenium和Java提取表元素的id属性的动态值(selenium获取动态元素)
我有一张表,其中每一行都会有一个下载链接,其中包含(部分)自动生成的id元素。原因是实际的href元素始终为“#”,因此ID分开了下载。
我需要在td中找到该id元素的名称。那就是:我知道表行有一个id元素,并且我知道部分名称,并且我需要获得确切的名称。
我一次访问每一行,因此我一次只需要查看一次即可。无需浏览整个表格。
我知道名称后如何查找元素。但是在我只知道类型的时候找到元素是另一回事。
...<tr> <td<ahref="#" id="downloadJournalPost-345">Download</a> </td></tr><tr> <td<ahref="#" id="downloadJournalPost-346">Download</a> </td></tr>...
我在网络驱动程序中找不到任何可以按类型查找元素的方法。
由于ID的名称为“ downloadJournalPost-
xxx”,因此仅更改xxx即可使用部分名称。但是链接文本是唯一可以找到的值,它使我可以搜索部分匹配项。
编辑:更完整的标记。
<td> <span>In <!----><est-ikon> <div aria-hidden="true"> <svg focusable="false"> <use xlink:href="#ikon-pil3-inn"></use> </svg> </div></est-ikon><!----></span> <span> Application and attachments</span> <ahref="#" id="lastNedJournalPost-2892">Download journal post</a></td>
答案1
小编典典要打印该元素的 id* 属性 的 List ,您需要为引入 WebDriverWait ,并且可以使用 Java8
和,并且可以使用以下任一Locator
Strategies:
*____visibilityOfAllElementsLocatedBy()
__stream()
map()
cssSelector
:List<String> myID = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.cssSelector("td.journalTable-journalPost>a.htext-small"))).stream().map(element->element.getAttribute("id")).collect(Collectors.toList());
System.out.println(myIDs);
xpath
:List<String> myIDs = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath("//td[@journalTable-journalPost'']/a[@htext-small'' and text()=''Download'']"))).stream().map(element->element.getAttribute("id")).collect(Collectors.toList());
System.out.println(myIDs);
Java Selenium如何使用sendkeys上传文件
下载和安装AutoIt
文件上传是自动化中棘手的部分,目前selenium并没有提供上传的实现api,所以知道借助外力来完成,如autoit、sikuli。
AutoIt , 这是一个使用类似BASIC脚本语言的免费软件,它设计用于Windows GUI(图形用户界面)的自动化操作,利用模拟键盘按键,鼠标移动和窗口/控件的组合来实现自动化任务;
1.打开AutoIt的官网下载
两种下载方法都可以,这里我想下载的是zip,解压出来如下图所示:
立即学习“Java免费学习笔记(深入)”;
点击SciTe文件夹,我们打开脚本编辑器。
打开百度图片上传窗口,打开AutoIt Windows Info 工具,鼠标移动到Finder Tool,按住鼠标左键拖动到需要识别的windows控件上。拖动元素定位器上那个靶点形状按钮到文件上传弹窗,能够捕获到一些元素信息。用鼠标拖住工具上的Finder Tool的图标(即图中蓝色圈圈部分)到要识别的控件上,控件的唯一标识信息会显示在工具的左侧部分(图中红框标出的部分)。从显示的结果得知,此控件的Title=“打开”,Class为Edit,Instance=1。我们就是利用控件的这些信息,定位控件,编写脚本。
打开编辑器,根据控件Finder Tool识别到的信息来调用函数编写脚本;在AutoIt脚本编辑器里输入如下脚本,不要下面我写的备注哈。
我们这里需要知道有以下信息:
1.操作页面的title,用于固定操作的页面。
2.需要填入的信息,在输入框中填入“上传文件的路径及文件名”(windows操作)
3.点击“打开”按钮,实现文件上传。
根据以上所识别的控件信息,利用编辑器SciTE Script Editor,根据AutoIT的语法编写脚本。
实现文件上传需要的几个方法:
ControlFocus ( "窗口标题", "窗口文本", 控件ID) ---->设置输入焦点到指定窗口的某个控件上(即:控件ID“文件名”输入框的id) WinWait ( "窗口标题" [, "窗口文本" [, 超时时间]] ) ---->暂停脚本的执行直至指定窗口存在(出现)为止 ControlSetText ( "窗口标题", "窗口文本", 控件ID, "新文本" ) ---->修改指定控件的文本(即:控件ID“文件名”输入框的id) Sleep ( 延迟 ) ---->使脚本暂停指定时间段 ControlClick ( "窗口标题", "窗口文本", 控件ID [, 按钮] [, 点击次数]] ) ---->向指定控件发送鼠标点击命令(即:控件ID“打开”按钮的id)
其中,title即AutoIt Window Info识别出的Title字段,controlID即AutoIt Window Info识别出的Class和Instance的拼接,如上图拼接后的结果应为:Button1(即classnameNN)
ControlFocus(("title","text",controllD)用于识别windows文件上传窗口 ControlFocus("打开","","")向文件名输入框输入本地要上传文件的路径 ControlSetText("打开","","Edit1","C:\Users\DELL\Desktop\test\upload\北京宏哥.jpeg") Sleep(2000)点击上传窗口中的“打开“按钮 ControlClick("打开","","Button1")
保存脚本文件为ChromFileUpload.au3格式,然后在AutoIt脚本编辑器中点击Tools菜单,tools=>go,执行脚本验证(前提是windows窗口必须是打开状态),验证成功,如下图所示:
为了这个脚本能被java 程序调用,需要通过Compile Script to .exe (x64)工具生成exe文件(这个是通过.exe安装包安装的AutoIt)
AutoIt脚本编辑器中点击Tools菜单,选择compile,会在同路径下生成一个.exe的文件(这个是通过解压包安装的AutoIt)
提示Conversion complete转化完成:将ChromeFileUpload.exe拷贝到项目下,待会在Selenium脚本要使用。
java代码
//实现文件上传。通过Runtime的静态方法获取Runtime对象 Runtime runtime = Runtime.getRuntime(); //通过Runtime对象调用exe方法 runtime.exec("C:\Users\DELL\Desktop\test\upload\ChromeFileUpload.exe");
以上就是Java Selenium如何使用sendkeys上传文件的详细内容,更多请关注php中文网其它相关文章!
javascript – 如何使用Selenium WebDriver访问动态添加的iframe?
我遇到的问题是,当使用driver.switch_to_frame(x)切换到帧时,我仍然可以找到我的任何内容.
我已经尝试循环遍历使用driver.find_elements_by_tag_name(‘iframe’)找到的帧,并检查每个帧我期望找到的类,但没有这样的运气.
driver.switch_to_active_element()也没有给我正确的iframe.
我不确定iframe内容是否只是无法访问,因为JS DOM更改未反映在Selenium从驱动程序中看到的内容中.我已经为其他iframe完成了同样的过程而没有任何问题,但是这个只是不合作.以下是我正在处理的简化版本.
在JS之前:
<html> <body> <a onclick="jsmagic">load iframe</a> </body> </html>
JS之后:
<html> <body> <iframe><div>Message</div></iframe> <a onclick="jsmagic">load iframe</a> </body> </html>
Python WebDriver尝试:
driver.switch_to_frame(0) driver.find_elements_by_class_name('modal') driver.switch_to_default_content()
我也尝试了类似的变体:
frame = driver.find_elements_by_tag_name('iframe')[0] driver.switch_to_frame(frame) driver.find_elements_by_class_name('modal')
我曾尝试使用driver.execute_script来访问该对象,但获取内容超出了我的范围. Firefox控制台命令无法通过Selenium运行.
解决方法
def modal_must_show(self,string): for _ in range(12): for frame in self.driver.find_elements_by_tag_name('iframe'): try: if not frame.is_displayed(): continue if frame.parent.page_source.find(string): return except: pass assert False,'Modal missing string'
javascript – 如何使用selenium获取CSS选择器的所有元素的直接子代?
我正在尝试存储一个列表,它将包含元素的所有直接子代,但不包含其子(后代),当我使用“*”语法时,我得到所有元素的后代.
解决方法
为了得到“所有直接的元素的孩子,而不是他们的孩子”的身体,使用身体> *.
或者另一个例子,为了得到< div id ='question'>的所有直接后代,使用div#question> *.
RSelenium和Javascript
我对R相当精通,但是对javaScript和其他语言一无所知。我想访问有关此公开可用数据集的信息(http://fyed.elections.on.ca/fyed/zh-
CN/form_page_en.jsp)。尤其是,我在数据框中列出了几千个(A1A1A1)形式的邮政编码。我想将这些邮政编码中的每一个都提交到此网站,然后提取返回的选举区的名称。RSelenium似乎很理想,但是我无法弄清楚如何使JavaScript正常工作。我正在使用R
3.0.3和RSelenium_1.3的Mac OS 10.9.5。Firefox是第33版,Selenium是2.44。以下脚本有效。
require(RSelenium)
checkForServer()
startServer()
remDr<-remoteDriver()
remDr$open()
remDr$getStatus()
remDr$navigate("http://fyed.elections.on.ca/fyed/en/form_page_en.jsp")
#After inspecting the source code,you can see the input box has the id 'pcode',for postal code
webElem<-remDr$findElement(using = 'id',value = "pcode")
webElem$getElementAttribute('id')
#This is where I am stuck
remDr$executeScript(script='arguments[0].click(m1p4v4)',list(webElem))
#Utlimately,I have a list of several thousand postal codes,so I would like to create a loop through to extract all the district names that are stored on the pages that are returned with a successful javascript (see previous command). Three real postal codes that return results are as follows:
p.codes<-c('m1p4v4','n3t2y3','n2h3v1')
我觉得我只是不了解使这项工作所需的javascript命令或executeScript的语法。我将不胜感激。
今天的关于如何使用Selenium和Java提取表元素的id属性的动态值和selenium获取动态元素的分享已经结束,谢谢您的关注,如果想了解更多关于Java Selenium如何使用sendkeys上传文件、javascript – 如何使用Selenium WebDriver访问动态添加的iframe?、javascript – 如何使用selenium获取CSS选择器的所有元素的直接子代?、RSelenium和Javascript的相关知识,请在本站进行查询。
本文标签: