How to click on the element through Selenium and Java - selenium

I'm trying to click on the button but i cannot focus on it.
<td style="width:100%;height:63px" class="leftNavTabNormal nopad" onclick="selectPerspective('Production')">Production</td>
This is my code:
driver.findElement(By.xpath("//*[#onclick='selectPerspective(Production)']")).click();
I cannot use the "class" because its not uniq
Please help me.

To click on the element with text as Production you can use either of the following solutions:
cssSelector:
driver.findElement(By.cssSelector("td.leftNavTabNormal.nopad[onclick*='Production']")).click();
xpath:
driver.findElement(By.xpath("//td[#class='leftNavTabNormal nopad' and text()='Production']")).click();

Seems like your xpath missed apostrophe
Here is your page code
<td style="width:100%;height:63px" class="leftNavTabNormal nopad" onclick="selectPerspective('Production')">Production</td>
Here is your automation code
driver.findElement(By.xpath("//*[#onclick='selectPerspective(Production)']")).click();
Here is correct code with apostrophe
driver.findElement(By.xpath("//*[#onclick='selectPerspective('Production')']")).click();

Related

find specific element for button using selenium for web scraping

I am inspecting one button element from a web page using chrome driver and selenium. And the html code for the particular button is:
<div class="label text-left text-link link-blue text-
uppercase">Financial Statement Analysis <span class="count">(2)</span>
</div>
I have tried different element options like find element by name, xpath, link text etc. But none of them unable to locate the element.
What will be the element to locate the button. ?
try Xpath :
//span[contains(#class,'count') and text() = '(2)']
You can try with this css selector :
div.label.text-left.text-link.link-blue.text-.uppercase
To locate the element with text as Financial Statement Analysis (2) you can use the following solution:
Java Solution:
WebElement elem = driver.findElement(By.xpath("//div[#class='label text-left text-link link-blue text-uppercase'][contains(.,'Financial Statement Analysis')]"));

Selenium click anchor link with class attribute

Can anyone help how to click the below link using selenium
<a class=”btn btn-primary btn-large” href="target-URL">Submit</a>
I tried using below options
linkText
partialLinkText
CssSelector
contains - logic which checks the URL text
You can try:
driver.findElement(By.xpath("//a[contains#class,'btn '] and contains(#class, 'btn-large') and contains(text(), 'Submit')")).click()
Give full xpath
driver.findElement(By.xpath("html/body/a").click();
Can try with tag name
driver.findElement(By.tagName("a").click();
Try with below xpath:
driver.findElement(By.xpath("//a[#href='target-URL']").click();
In theory, this is just:
driver.findElment(By.linkText("Submit")).click();
But, I'm pretty sure you've already tried that. Check if the element is in iframe/frame. If yes, you need to switch to it and only then find the link element:
driver.switchTo().frame("frame_name_or_id");
To switch back in the main context, use defaultContent():
driver.switchTo().defaultContent();

how to locate element with selenium webdriver for below html

I have an issue clicking on the below HTML:
<div id="P7d2205a39cb24114b60b80b3c14cc45b_1_26iT0C0x0" style="word-wrap:break-word;white-space:pre-wrap;font-weight:500;" class="Ab73b430b430a49ebb0a0e8a49c8d71af3"><a tabindex="1" style="cursor:pointer;" onclick="var rp=$get('ctl00_ContentPlaceHolder1_ReportViewer1_ctl10_ReportControl');if(rp&&rp.control)rp.control.InvokeReportAction('Toggle','26iT0C0x0');return false;" onkeypress="if(event.keyCode == 13 || event.which == 13){var rp=$get('ctl00_ContentPlaceHolder1_ReportViewer1_ctl10_ReportControl');if(rp&&rp.control)rp.control.InvokeReportAction('Toggle','26iT0C0x0');}return false;"><img border="0" src="/Reserved.ReportViewerWebControl.axd?OpType=Resource&Version=10.0.30319.1&Name=Microsoft.ReportingServices.Rendering.HtmlRenderer.RendererResources.TogglePlus.gif" alt="+"></a> 2013</div>
I have used the below script to click anchor inside a div tag. For the above html code it is not fixed only end part of id example "26iT0C0x0" is fixed. The script that I have used is:
WebElement e1=wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//div[ends-with(#id,'26iT0C0x0')]/a")));
e1.click();
You can use the 'contains' method within an xpath lookup:
driver.findElement(By.xpath("//div[contains(#id,'26iT0C0x0')]")
I would recommend you to consider CSS selector alternative as CSS working faster, than xpath.
So 'contains' in attribute in CSS stands for '*=', for example
if we want to find attribute by 'CSS' ending in this: <htmlTag A="blablaCSS" > we need do the following:
String CSSselector="htmlTag[A*=CSS]";
and you get this element searched.
So considering your example CSS selector be like:
String cssSearched="div[id*=26iT0C0x0] a";
also try to click not on link - a
but on parent div as well:
String cssSearched="div[id*=26iT0C0x0]";
driver.findElement(By.cssSelector(cssSearched));
hope this works for you.
As Mark Rwolands already mentioned: the xpath-Function 'ends-with()' isn't supported in Selenium 2.
Also, if you maybe consider to use chromeDriver in the future, I would recommend clicking the image, not the anchor, see:
https://sites.google.com/a/chromium.org/chromedriver/help/clicking-issues
edit:
Also your IDs are looking generated. I wouldn't count on them for a stable test-environment.

issue accessing a text using xpath

I'm trying to find Approvals in the following html and cant seem to get it. I've tried:
//td[*/text()='Approvals']
//td[contains(#class, 'Approvals')]
any help would be appreciated
<td class="ThemeGrayMainItem" name="cmSubMenuID4"
onmouseup="cmItemMouseUp (this,1,'cmSubMenuID4',0,32)"
onmouseout="cmItemMouseOut (this,1,'cmSubMenuID4',0,32)"
onmousedown="cmItemMouseDown (this,1,'cmSubMenuID4',0,32)"
onmouseover="cmItemMouseOverOpenSub (this,1,'cmSubMenuID4',0,32)">Approvals
</td>
You may use contains():
//td[contains(., 'Approvals')]
where . refers to the element's text.
You can also apply additional checks, for instance, on the class name:
//td[#class='ThemeGrayMainItem' and contains(., 'Approvals')]
I would use the following xpath:
//td[contains(text(),'Approvals')]
or if you wanted to be more specific:
//td[#class='ThemeGrayMainItem'][contains(text(),'Approvals')]

how to click on element using WebDriver

i need to click on dat element:
<span id="act_action9" class="" onclick="openDialog('export', event)">
text
</span>
i cant click on id,because it is dynamic. After a click i am getting window with some settings.
You should use xpath in order to click this element, so you could add an expression that unequivocally identify this element.
Could you please include more HTML code, because just with the code included is not enough to create a xpath expression.
I recommend this tutorial to start doing good xpath expressions:
http://www.w3schools.com/xpath/
See example for dynamic xpath
By.xpath("//span[#id [contains(.,'act_action')]]")
Great xpath cheatsheets: http://extract-web-data.com/5-best-xpath-cheat-sheets-and-quick-references/
You can also use xpath like following(assuming only digit is dynamic):
".//span[contains(#id, 'act_action')]"
As ID is dynamic, you can use xpath for text which is inside span.
driver.findElement(By.xpath("//span[text()='text']").click();
Or if part of ID remain common, then you can use
//span[contains(#id,'act')]