I'm trying to get selenium to click elements but nothing happend, i tried using xpath, name, text but not successfull
here is this element:
QC inspector create inspection report
xpath
//*[#id="CustomHTML0"]/table/tbody/tr[4]/td[2]/a
here is my code:
Dim Crn As Selenium.WebElements
Set Crn = Bot.FindElementsByLinkText("QC inspector create inspection report", timeout:=5000)
Crn(1).Submit
or
Dim Crn As Selenium.WebElements
Set Crn = Bot.FindElementsByXpath("//*[#id="CustomHTML0"]/table/tbody/tr[4]/td[2]/a", timeout:=5000)
Crn(1).Submit
please help me, or point out where i went wrong
Thank you very much
Here is more code:
<table border="0"><tbody><tr><td valign="top" width="200px"><font size="+1">Master Maintenance</font></td><td>Vendor Factory Maintenance</td></tr><tr><td valign="top" width="200px"><font size="+1">Enquiry</font></td><td>QA user inquiries inspection report</td></tr><tr><td valign="top" width="200px"><font size="+1"></font></td><td>QA user inquiries inspection report eConnect2</td></tr><tr><td valign="top" width="200px"><font size="+1">Update</font></td><td>QC inspector create inspection report</td></tr><tr><td valign="top" width="200px"><font size="+1"></font></td><td>Vendor creates inspection report</td></tr><tr><td valign="top" width="200px"><font size="+1"></font></td><td>Vendor create inspection requisition</td></tr><tr><td valign="top" width="200px"><font size="+1"></font></td><td>VA inspector create correlation inspection report</td></tr><tr><td valign="top" width="200px"><font size="+1"></font></td><td>VA supervisor revise approved correlation inspection report</td></tr><tr><td valign="top" width="200px"><font size="+1">Enquiry</font></td><td>QA user inquiries correlation inspection report</td></tr></tbody></table>
Related
The DOM my test application changes depending upon the window size. So I am trying to write an XPATH which will cater for both of these scenarios.
Scenario 1: When the window is maximum size below is the dom:
<tbody>
<tr><td class="sv-table-col-xs"><img src="image.gif">
</td>
<td>03/Mar/2020</td>
<td><span class="sv-label sv-label-primary">You</span>
</td><td>0% of 1</td>
<td>Complete academic review</td>
</tr>
</tbody>
I am using xpath:
//tr[td[contains(text(), '03/Mar/2020')]]//a[text()='Complete academic review']
This works fine and finds the element.
Scenario 2: Below is the DOM when window is shrinked
<tbody>
<tr><td class="sv-table-col-xs">
<b class="tablesaw-cell-label">Status</b>
<span class="tablesaw-cell-content"><img src="../images/emailunr.jpg" style="border:0px" alt="..\images\icons\exploding_email1.gif.gif"></span>
</td>
<td><b class="tablesaw-cell-label">Due Date</b>
<span class="tablesaw-cell-content">03/Mar/2020</span>
</td>
<td><b class="tablesaw-cell-label">Primary Reviewer</b>
<span class="tablesaw-cell-content"><span class="sv-label sv-label-primary">You</span></span>
</td>
<td class="tablesaw-cell-hidden"><b class="tablesaw-cell-label">Other Reviewers</b>
<span class="tablesaw-cell-content">0% of 1</span>
</td>
<td class="tablesaw-cell-hidden"><b class="tablesaw-cell-label">Action</b><span class="tablesaw-cell-content">
Complete academic review
</span></td></tr>
</tbody>
For this the xpath changes to:
//tr/td[5]/span/a
to get to both elements I have tried to use:
//tr/td[5]/span/a | //tr[td[contains(text(), '03/Mar/2020')]]//a[text()='Complete academic review']
this xpath works but I on shrinked window I am not validating the element with text contains ''03/Mar/2020' & 'Complete academic review'.
Not sure if there is a way to validate the texts in both scenarios before selecting the element.
You want to use string value of a node. And function text() doesn't do it.
So instead use . or string() at least for date filtering part.
//tr[td[contains(., '03/Mar/2020')]]//a[text()='Complete academic review']
Using selenium vba i want 2nd row and 2nd column value from webpage table below is the code which i have try but it capture all table.
The output which i want is 8.
driver.FindElementByXPath("//table[contains(#class,'zedoLocTable')]").text
Please find the below html code.
<tr>
<td colspan="4">
<div id="localityTiers">
<br><br>
<table class="zedoLocTable" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<th>TYPE</th>
<th>TIER</th></tr>
<tr>
<td><b>Resedential Sale</b>
</td><td>8</td>
</tr>
<tr><td><b>Resedential Rent</b>
</td><td>5</td>
</tr><tr>
<td><b>Commercial Sale</b>
</td><td>1</td>
</tr><tr>
<td><b>Commercial Lease</b>
</td><td>1</td>
</tr></tbody></table><table></table></div>
</td>
</tr>
Below is the table pic
As per the HTML you have shared to extract the text 8 you can use the following solution:
driver.FindElementByXPath("//table[#class='zedoLocTable']//tr/td/b[contains(.,'Resedential Sale')]//following::td[1]").text
You can use a faster CSS selector, than using xPath, if you are working with later IE or other browers apart from IE
Debug.Print driver.FindElementByCSS(".zedoLocTable td + td").innerText
I am using the "Survey Link" template to create a project on Mechanical Turk.
I am running an A/B test. I would like to direct 50% of workers to one link, and 50% to another link.
How do I do this?
From the "Design Layout" page, click on "Source". This will let you edit the html/javascript/css for the survey.
You'll find a <table> element with a <tbody> element. Change the <tbody> element to this:
<tbody>
<tr class="survey-one">
<td><label>Survey link:</label></td>
<td><a class="dont-break-out" href="http://link-to-survey-1">http://link-to-survey-1</a></td>
</tr>
<tr class="survey-two">
<td><label>Survey link:</label></td>
<td><a class="dont-break-out" href="http://link-to-survey-2">http://link-to-survey-2</a></td>
</tr>
</tbody>
This simply adds another row to the table for the link for your second survey. Note the link-to-survey-1 and link-to-survey-2 that you'll need to replace with your own links.
A bit lower in the file, you'll see the <style> element. Add this to it:
.survey-hidden {
display: none;
}
And a bit lower, you'll see a <script> element. At the bottom of it, right before the });, add the following javascript:
var surveyToHide = (Math.random() >= 0.5) ? '.survey-one' : '.survey-two';
$(surveyToHide).addClass('survey-hidden');
This randomly picks one of your suveys, and makes it hidden, so that the worker sees only one.
I'm trying to copy text from a website with the following code and I want it to automatically click the "NEXT" button at the end of the table, without clicking it the code works just fine but when I add the last line to click it gives the error:
"Message: Element is no longer attached to the DOM Stacktrace: at
fxdriver.cache.getElementAt
(resource://fxdriver/modules/web-element-cache.js:9354)
at Utils.getElementAt (file:///c:/users/user/appdata/local/temp/tmpa7dvts/extensions/fxdriver#googlecode.com/components/command-processor.js:8978)
at WebElement.getElementText (file:///c:/users/user/appdata/local/temp/tmpa7dvts/extensions/fxdriver#googlecode.com/components/command-processor.js:11965)
at DelayedCommand.prototype.executeInternal_/h (file:///c:/users/user/appdata/local/temp/tmpa7dvts/extensions/fxdriver#googlecode.com/components/command-processor.js:12534)
at DelayedCommand.prototype.executeInternal_ (file:///c:/users/user/appdata/local/temp/tmpa7dvts/extensions/fxdriver#googlecode.com/components/command-processor.js:12539)
at DelayedCommand.prototype.execute/< (file:///c:/users/user/appdata/local/temp/tmpa7dvts/extensions/fxdriver#googlecode.com/components/command-processor.js:12481)"
The code I'm using is:
driver = webdriver.Firefox()
driver.get("https://it.website.com/Statistics")
wait = ui.WebDriverWait(driver, 10)
wait.until(page_is_loaded)
Next_first = 0
Next_first = driver.find_elements_by_id("next")[0]
data_vector [i]=driver.find_elements_by_class_name("tn")[i].text
Next_first.click()
While the website code is:
<tr>
<td class="tn"> text
</td>
<table class="table class" id="table id">
<thead>...code for table title...
</thead>
<tbody>
<tr>
<td class="tn">data
</td>
</tr>
</tbody>
<dd>
<a class="option clickable" id="next" data-page="1">NEXT</a>
</dd>
</tr>
Is there more than the html-source, like javascript?
Because the input could be detached by javascript, which means you have to wait for it to load properly ( driver.implicitly_wait(#seconds) )
here the link to the discription of "implicit-waits"
The second solution could be that you have to clear the cache/cookies of the webdriver before testing, which is described here
I have a menu ribbon that is constructed from tags, Sub lists are hidden until the upper level list is clicked on. How do I identify the target of this image so that I can click on it?
<li class="rbnsel">
<div class="rbl" href="option/index?lfeCyc=Active">
<img src="../icn/op.png">
</img>
Options
</div>
Selenium IDE doesn't identify the image and link (beyond the higher list item), I have tried:
css=rbl:contains('option')
and
xpath=//span[url()='option/index?lfeCyc=Active']
Suggestions of what I should be using to identify the Target would be appreciated.
Edit:
I have added the javascript that triggers the link to be created.. So my Selenium IDE table source is below..
<tr>
<td>selectWindow</td>
<td>null</td>
<td></td>
</tr>
<tr>
<td>click</td>
<td>link=Publish</td>
<td></td>
</tr>
<tr>
<td>runScript</td>
<td>var path = $(this).attr('href'); if (e.which == 1 && !e.ctrlKey) {window.location = getCsBaseUrl() + "/" + path;} else {csNewWindow(path);</td>
<td></td>
</tr>
<tr>
<td>MouseOver</td>
<td>//div[contains(#class, 'rbl') and text()='Options']</td>
<td></td>
</tr>
<tr>
<td>click</td>
<td>//div[contains(#class, 'rbl') and text()='Options']</td>
<td></td>
</tr>
I guess perhaps my sequence or code is wrong, I have tried all possible combinations but no luck.
WebElement we = driver.findElement(By.cssSelector("div.rbl img"));
Then you could do
string attr = we.getAttribute("src");
Hope that helps
I have fudged a solution - but just using the open command for the links in question. It is not a standard mouseover, mousedown set of actions however it will do for now ;-)
ie command 'open' and Target:
/option/index