有一个表格,其中有3个字段,有3个不同的ID:
<fieldset>
<div><label for="field1">
FIELD1
</label>
<textarea id="field1" name="field1" rows="10" cols="40"></textarea></div>
<div><label for="field2">
FIELD2
</label><textarea id="field2" name="field2" rows="10" cols="40"></textarea></div>
<div><label for="field3">
FIELD3
</label><textarea id="field3" name="field3" rows="10" cols="40"></textarea></div>
</fieldset>
Run Code Online (Sandbox Code Playgroud)
现在,在我们的Scrum过程中有一个故事,它将FIELD3置于页面顶部,在FIELD1之上,因此新的字段顺序将为3,1,2.
我的问题是:有没有办法验证/断言订单?如果是,我如何使用Selenium Webdriver(java)自动测试?
如果我理解W3C关于WebDriver API的信息,那么实现此API的浏览器可以通过使用RESTful API实现自动化.也就是说,我可以打开与浏览器的HTTP连接,并使用REST向它发送命令.
我还发现了这个Gist,它证实了我的猜测是正确的:Node.js脚本直接连接到已作为WebDriver服务器启动的PhantomJS.
到现在为止还挺好.
我现在没有得到的是为什么显然对于任何其他浏览器我仍然需要Selenium服务器.即使像webdriverjs这样的项目也要求我运行Selenium服务器.
我的问题是:为什么?
如果没有额外的Selenium服务器,是不是可以自动化浏览器?浏览器是否无法直接提供此API(如PhantomJS显然那样)?
请问有人可以解决这个问题吗?
我是Selenium WebDriver的新手.谁能告诉我这两行之间有什么区别?
WebDriver driver = new FirefoxDriver();
Run Code Online (Sandbox Code Playgroud)
和
FirefoxDriver d = new FirefoxDriver();
Run Code Online (Sandbox Code Playgroud)
两者都推出了Firefox浏览器.那么为什么我们总是写第一行而不是第二行呢?
如何检查硒中是否存在元素?
我试过了:
browser.driver.findElements(by.id('my-id'))
但它似乎没有用.
我有一个python脚本,它试图自动下载excel文件.我试图直接解决firefox配置文件,它工作正常:
path = '\\path\\to\\firefox\\default\\profile\\'
fp = webdriver.FirefoxProfile(path)
driver = webdriver.Firefox(firefox_profile=fp)
driver.maximize_window()
driver.get('url')
driver.find_element_by_id('downloadButton').click()
time.sleep(5)
driver.close()
Run Code Online (Sandbox Code Playgroud)
但是当我尝试以编程方式设置配置文件时,它不起作用; 还有下载弹出窗口:
fp = webdriver.FirefoxProfile()
fp.set_preference('browser.download.folderList', 2)
fp.set_preference('browser.download.manager.showWhenStarting', False)
fp.set_preference('browser.download.dir', os.getcwd())
fp.set_preference('browser.helperApps.neverAsk.saveToDisk', 'text/csv/xls/xlsx')
driver = webdriver.Firefox(firefox_profile=fp)
driver.maximize_window()
driver.get('url')
driver.find_element_by_id('downloadButton').click()
time.sleep(5)
driver.close()
Run Code Online (Sandbox Code Playgroud)
我也改了行fp.set_preference('browser.helperApps.neverAsk.saveToDisk', 'text/csv/xls/xlsx')
到fp.set_preference('browser.helperApps.neverAsk.saveToDisk', ('application/vnd.ms-excel'))
; 但没有变化.
知道我错了什么吗?
编辑1:
我试过了
fp.set_preference('browser.helperApps.neverAsk.saveToDisk', "text/plain, application/vnd.ms-excel, text/csv, text/comma-separated-values, application/octet-stream")
Run Code Online (Sandbox Code Playgroud)
和
fp.set_preference('browser.helperApps.neverAsk.saveToDisk', "text/plain, application/vnd.ms-excel, text/csv, text/comma-separated-values, application/octet-stream, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
Run Code Online (Sandbox Code Playgroud)
结果没有变化.
我正在尝试使用Java中的Selenium脚本保存HTML页面,该脚本执行以下操作
现在的问题是,当脚本单击“另存为html”选项时,它会显示一个弹出窗口以保存html。
我已经设置了在Firefox中下载的默认选项,但是当我运行脚本时,它会不断显示我弹出窗口,我需要的是:-
我想遍历选择菜单中的所有可用选项,依次单击每个选项,然后确认单击每个选项将用宽度和高度值更新特定的元素。
这是选择菜单的代码:
<span id="SizeSelectContainer" class="dropdownButton" style="min-width: 100px; max-width: 120px;">
<select id="SizeSelect" title="Zoom" tabindex="23" data-l10n-id="zoom" style="min-width: 126px;">
<option id="SizeAutoOption" title="" value="auto" selected="selected" data-l10n-id="pagesizeauto">Automatic Size</option>
<option id="SizeActualOption" title="" value="page-size-actual" data-l10n-id="pagesizeactual">Actual Size</option>
<option title="" value="0.1">10</option>
<option title="" value="0.5">50</option>
<option title="" value="1">100</option>
</select>
</span>
Run Code Online (Sandbox Code Playgroud)
当我单击每个选项时,位于页面其他位置的另一个元素内的值将更改(请参见下文)-选中后,除下拉选项(默认选项)外,没有任何“选择”属性应用于任何下拉选项无法基于“选定”属性断言选择。
我要做的事情(我尚未在示例中进行编码)是,当选择了特定的选择选项时,另一个页面元素(如下所示)将更新以容纳新的宽度和高度值:
<div id="Container" class="page" style="width: 547px; height: 865px; data-loaded="true">
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止提出的-请注意,我还没有断言
IWebElement AutoSize = UtilityClass.driver.FindElement(By.Id("SizeAutoOption"));
IWebElement ActualSize = UtilityClass.driver.FindElement(By.Id("SizeActualOption"));
IWebElement Ten = UtilityClass.driver.FindElement(By.XPath("//*[@id='SizeSelect']/option[3]"));
IWebElement Fifty = UtilityClass.driver.FindElement(By.XPath("//*[@id='SizeSelect']/option[4]"));
IWebElement Hundred = UtilityClass.driver.FindElement(By.XPath("//*[@id='SizeSelect']/option[5]"));
Object[] SelectElements = new Object[] { AutoSize, ActualSize, Ten, …
Run Code Online (Sandbox Code Playgroud) 给出以下代码:
if (element(by.name("checkbox")).isSelected()) {
element(by.name("checkbox")).click();
}
Run Code Online (Sandbox Code Playgroud)
它总是点击复选框,无论它是否先前被选中,它就像它返回什么并不重要.我也试过了
if (element(by.name("checkbox")).isSelected() == true) {
element(by.name("checkbox")).click();
}
Run Code Online (Sandbox Code Playgroud)
相同的结果.
但是,当我把代码放在预期中时,它就像一个魅力... ex:
expect(element(by.name("checkbox")).isSelected().toBe(true));
Run Code Online (Sandbox Code Playgroud)
如果选择了,则给出正确的答案.
这是Protractor的错误还是我在这里做错了什么?
PS:我试图在selenium webdriver junit中运行类似的代码,它的工作原理.
WebElement p1 = (new FirefoxDriver()).findElement(By.xpath("//div[@class = 'site-title']")) ;
WebElement p2 = (new FirefoxDriver()).findElementByXPath("//div[@class = 'site-title']") ;
Run Code Online (Sandbox Code Playgroud)
我做同样的事情:我选择xpath元素,但在第一行,我使用findElement(By.xpath)
和第二,我使用整个表达式findElementByXpath.
我仍然使用相同的firefox驱动程序对象!
这是因为By.界面和访问方式不同?
我有一个包含多行和多列的表.
HTML代码如下所示:
<!-- language: lang-html -->
<div id="ScheduleTable-01" class="widget Scheduletable suppress-errors Schedule-grid" data-widget="ScheduleTable">
<div class="grid-wrapper">
<table class="nostyles weekmode hourstype fullmonth" style="width: 100%;">
<thead>
<tbody>
<tr id="20631697" class="Schedule-row row0 20631697 key_AuthoriserId-1077_JobId-402704200_TaskId-CON_TsCode-35" data-row-index="0" data-job="402121200,Job XXX">
<tr id="-499545938" class="Schedule-row row1 -499545938 key_AuthoriserId-1077_JobId-A01200131S_TaskId-CON_TsCode-35" data-row-index="1" data-job="A01763431 Job YYY">
<tr id="-985929934" class="Schedule-row row2 -985929934 key_AuthoriserId-1277_JobId-I02010171S_TaskId-INT_TsCode-30" data-row-index="2" data-job="I02872371 S,Job ZZZ">
Run Code Online (Sandbox Code Playgroud)
因为它是一个动态网页,所以每次加载页面时,Job YYY都会被放置在不同的行索引中.因此,我想知道Job YYY所在表的哪一行.我可以看到每一行都标有data-row-index
,这就是我想要的.
我正在考虑这个Selenium代码
<!-- language: lang-java -->
WebElement mainTable = driver.findElement(By.id("ScheduleTable-01"));
//I am not sure about this part below; findElements …
Run Code Online (Sandbox Code Playgroud) webdriver ×10
selenium ×9
java ×5
javascript ×2
protractor ×2
automation ×1
c# ×1
checkbox ×1
download ×1
firefox ×1
html ×1
node.js ×1
python ×1