blob: 6d5bcd1f9d62ab2c646982ac64ed36947f63dcbb [file] [log] [blame] [edit]
// <copyright file="ClickTest.cs" company="Selenium Committers">
// Licensed to the Software Freedom Conservancy (SFC) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The SFC licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
// </copyright>
using NUnit.Framework;
using OpenQA.Selenium.Environment;
using System;
namespace OpenQA.Selenium;
[TestFixture]
public class ClickTest : DriverTestFixture
{
[SetUp]
public void SetupMethod()
{
driver.Url = EnvironmentManager.Instance.UrlBuilder.WhereIs("clicks.html");
}
[TearDown]
public void TearDownMethod()
{
driver.SwitchTo().DefaultContent();
}
[Test]
public void CanClickOnALinkAndFollowIt()
{
driver.FindElement(By.Id("normal")).Click();
WaitFor(() => { return driver.Title == "XHTML Test Page"; }, "Browser title was not 'XHTML Test Page'");
Assert.That(driver.Title, Is.EqualTo("XHTML Test Page"));
}
[Test]
public void CanClickOnALinkThatOverflowsAndFollowIt()
{
driver.FindElement(By.Id("overflowLink")).Click();
WaitFor(() => { return driver.Title == "XHTML Test Page"; }, "Browser title was not 'XHTML Test Page'");
}
[Test]
public void CanClickOnAnAnchorAndNotReloadThePage()
{
((IJavaScriptExecutor)driver).ExecuteScript("document.latch = true");
driver.FindElement(By.Id("anchor")).Click();
bool samePage = (bool)((IJavaScriptExecutor)driver).ExecuteScript("return document.latch");
Assert.That(samePage, Is.True, "Latch was reset");
}
[Test]
public void CanClickOnALinkThatUpdatesAnotherFrame()
{
driver.SwitchTo().Frame("source");
driver.FindElement(By.Id("otherframe")).Click();
driver.SwitchTo().DefaultContent().SwitchTo().Frame("target");
Assert.That(driver.PageSource, Does.Contain("Hello WebDriver"));
}
[Test]
public void ElementsFoundByJsCanLoadUpdatesInAnotherFrame()
{
driver.SwitchTo().Frame("source");
IWebElement toClick = (IWebElement)((IJavaScriptExecutor)driver).ExecuteScript("return document.getElementById('otherframe');");
toClick.Click();
driver.SwitchTo().DefaultContent().SwitchTo().Frame("target");
Assert.That(driver.PageSource, Does.Contain("Hello WebDriver"));
}
[Test]
public void JsLocatedElementsCanUpdateFramesIfFoundSomehowElse()
{
driver.SwitchTo().Frame("source");
// Prime the cache of elements
driver.FindElement(By.Id("otherframe"));
// This _should_ return the same element
IWebElement toClick = (IWebElement)((IJavaScriptExecutor)driver).ExecuteScript("return document.getElementById('otherframe');");
toClick.Click();
driver.SwitchTo().DefaultContent().SwitchTo().Frame("target");
Assert.That(driver.PageSource, Does.Contain("Hello WebDriver"));
}
[Test]
public void CanClickOnAnElementWithTopSetToANegativeNumber()
{
driver.Url = EnvironmentManager.Instance.UrlBuilder.WhereIs("styledPage.html");
IWebElement searchBox = driver.FindElement(By.Name("searchBox"));
searchBox.SendKeys("Cheese");
driver.FindElement(By.Name("btn")).Click();
string log = driver.FindElement(By.Id("log")).Text;
Assert.That(log, Is.EqualTo("click"));
}
[Test]
public void ShouldSetRelatedTargetForMouseOver()
{
driver.Url = javascriptPage;
driver.FindElement(By.Id("movable")).Click();
string log = driver.FindElement(By.Id("result")).Text;
// Note: It is not guaranteed that the relatedTarget property of the mouseover
// event will be the parent, when using native events. Only check that the mouse
// has moved to this element, not that the parent element was the related target.
if (this.IsNativeEventsEnabled)
{
Assert.That(log, Does.StartWith("parent matches?"));
}
else
{
Assert.That(log, Is.EqualTo("parent matches? true"));
}
}
[Test]
public void ShouldClickOnFirstBoundingClientRectWithNonZeroSize()
{
driver.FindElement(By.Id("twoClientRects")).Click();
WaitFor(() => { return driver.Title == "XHTML Test Page"; }, "Browser title was not 'XHTML Test Page'");
Assert.That(driver.Title, Is.EqualTo("XHTML Test Page"));
}
[Test]
[IgnoreBrowser(Browser.IE, "Edge in IE Mode does not properly handle multiple windows")]
[NeedsFreshDriver(IsCreatedAfterTest = true)]
public void ShouldOnlyFollowHrefOnce()
{
driver.Url = clicksPage;
int windowHandlesBefore = driver.WindowHandles.Count;
driver.FindElement(By.Id("new-window")).Click();
WaitFor(() => { return driver.WindowHandles.Count >= windowHandlesBefore + 1; }, "Window handles was not " + (windowHandlesBefore + 1).ToString());
Assert.That(driver.WindowHandles, Has.Exactly(windowHandlesBefore + 1).Items);
}
[Test]
public void ClickingLabelShouldSetCheckbox()
{
driver.Url = formsPage;
driver.FindElement(By.Id("label-for-checkbox-with-label")).Click();
Assert.That(driver.FindElement(By.Id("checkbox-with-label")).Selected, "Checkbox should be selected");
}
[Test]
public void CanClickOnALinkWithEnclosedImage()
{
driver.FindElement(By.Id("link-with-enclosed-image")).Click();
WaitFor(() => { return driver.Title == "XHTML Test Page"; }, "Browser title was not 'XHTML Test Page'");
Assert.That(driver.Title, Is.EqualTo("XHTML Test Page"));
}
[Test]
public void CanClickOnAnImageEnclosedInALink()
{
driver.FindElement(By.Id("link-with-enclosed-image")).FindElement(By.TagName("img")).Click();
WaitFor(() => { return driver.Title == "XHTML Test Page"; }, "Browser title was not 'XHTML Test Page'");
Assert.That(driver.Title, Is.EqualTo("XHTML Test Page"));
}
[Test]
public void CanClickOnALinkThatContainsTextWrappedInASpan()
{
driver.FindElement(By.Id("link-with-enclosed-span")).Click();
WaitFor(() => { return driver.Title == "XHTML Test Page"; }, "Browser title was not 'XHTML Test Page'");
Assert.That(driver.Title, Is.EqualTo("XHTML Test Page"));
}
[Test]
[IgnoreBrowser(Browser.Firefox, "https://github.com/mozilla/geckodriver/issues/653")]
public void CanClickOnALinkThatContainsEmbeddedBlockElements()
{
driver.FindElement(By.Id("embeddedBlock")).Click();
WaitFor(() => { return driver.Title == "XHTML Test Page"; }, "Browser title was not 'XHTML Test Page'");
Assert.That(driver.Title, Is.EqualTo("XHTML Test Page"));
}
[Test]
public void CanClickOnAnElementEnclosedInALink()
{
driver.FindElement(By.Id("link-with-enclosed-span")).FindElement(By.TagName("span")).Click();
WaitFor(() => { return driver.Title == "XHTML Test Page"; }, "Browser title was not 'XHTML Test Page'");
Assert.That(driver.Title, Is.EqualTo("XHTML Test Page"));
}
[Test]
public void ShouldBeAbleToClickOnAnElementInTheViewport()
{
string url = EnvironmentManager.Instance.UrlBuilder.WhereIs("click_out_of_bounds.html");
driver.Url = url;
IWebElement button = driver.FindElement(By.Id("button"));
button.Click();
}
[Test]
public void ClicksASurroundingStrongTag()
{
driver.Url = EnvironmentManager.Instance.UrlBuilder.WhereIs("ClickTest_testClicksASurroundingStrongTag.html");
driver.FindElement(By.TagName("a")).Click();
WaitFor(() => { return driver.Title == "XHTML Test Page"; }, "Browser title was not 'XHTML Test Page'");
}
[Test]
[IgnoreBrowser(Browser.Firefox, "https://bugzilla.mozilla.org/show_bug.cgi?id=1502636")]
public void CanClickAnImageMapArea()
{
driver.Url = EnvironmentManager.Instance.UrlBuilder.WhereIs("click_tests/google_map.html");
driver.FindElement(By.Id("rectG")).Click();
WaitFor(() => { return driver.Title == "Target Page 1"; }, "Browser title was not 'Target Page 1'");
driver.Url = EnvironmentManager.Instance.UrlBuilder.WhereIs("click_tests/google_map.html");
driver.FindElement(By.Id("circleO")).Click();
WaitFor(() => { return driver.Title == "Target Page 2"; }, "Browser title was not 'Target Page 2'");
driver.Url = EnvironmentManager.Instance.UrlBuilder.WhereIs("click_tests/google_map.html");
driver.FindElement(By.Id("polyLE")).Click();
WaitFor(() => { return driver.Title == "Target Page 3"; }, "Browser title was not 'Target Page 3'");
}
[Test]
[IgnoreBrowser(Browser.Firefox, "https://bugzilla.mozilla.org/show_bug.cgi?id=1422272")]
public void ShouldBeAbleToClickOnAnElementGreaterThanTwoViewports()
{
string url = EnvironmentManager.Instance.UrlBuilder.WhereIs("click_too_big.html");
driver.Url = url;
IWebElement element = driver.FindElement(By.Id("click"));
element.Click();
WaitFor(() => { return driver.Title == "clicks"; }, "Browser title was not 'clicks'");
}
[Test]
[IgnoreBrowser(Browser.Firefox, "https://bugzilla.mozilla.org/show_bug.cgi?id=1937115")]
public void ShouldBeAbleToClickOnAnElementInFrameGreaterThanTwoViewports()
{
string url = EnvironmentManager.Instance.UrlBuilder.WhereIs("click_too_big_in_frame.html");
driver.Url = url;
IWebElement frame = driver.FindElement(By.Id("iframe1"));
driver.SwitchTo().Frame(frame);
IWebElement element = driver.FindElement(By.Id("click"));
element.Click();
WaitFor(() => { return driver.Title == "clicks"; }, "Browser title was not 'clicks'");
}
[Test]
public void ShouldBeAbleToClickOnRightToLeftLanguageLink()
{
String url = EnvironmentManager.Instance.UrlBuilder.WhereIs("click_rtl.html");
driver.Url = url;
IWebElement element = driver.FindElement(By.Id("ar_link"));
element.Click();
WaitFor(() => driver.Title == "clicks", "Expected title to be 'clicks'");
Assert.That(driver.Title, Is.EqualTo("clicks"));
}
[Test]
public void ShouldBeAbleToClickOnLinkInAbsolutelyPositionedFooter()
{
string url = EnvironmentManager.Instance.UrlBuilder.WhereIs("fixedFooterNoScroll.html");
driver.Url = url;
driver.FindElement(By.Id("link")).Click();
WaitFor(() => { return driver.Title == "XHTML Test Page"; }, "Browser title was not 'XHTML Test Page'");
Assert.That(driver.Title, Is.EqualTo("XHTML Test Page"));
}
[Test]
public void ShouldBeAbleToClickOnLinkInAbsolutelyPositionedFooterInQuirksMode()
{
string url = EnvironmentManager.Instance.UrlBuilder.WhereIs("fixedFooterNoScrollQuirksMode.html");
driver.Url = url;
driver.FindElement(By.Id("link")).Click();
WaitFor(() => { return driver.Title == "XHTML Test Page"; }, "Browser title was not 'XHTML Test Page'");
Assert.That(driver.Title, Is.EqualTo("XHTML Test Page"));
}
[Test]
public void ShouldBeAbleToClickOnLinksWithNoHrefAttribute()
{
driver.Url = javascriptPage;
IWebElement element = driver.FindElement(By.LinkText("No href"));
element.Click();
WaitFor(() => driver.Title == "Changed", "Expected title to be 'Changed'");
Assert.That(driver.Title, Is.EqualTo("Changed"));
}
[Test]
public void ShouldBeAbleToClickOnALinkThatWrapsToTheNextLine()
{
driver.Url = EnvironmentManager.Instance.UrlBuilder.WhereIs("click_tests/link_that_wraps.html");
driver.FindElement(By.Id("link")).Click();
WaitFor(() => driver.Title == "Submitted Successfully!", "Expected title to be 'Submitted Successfully!'");
Assert.That(driver.Title, Is.EqualTo("Submitted Successfully!"));
}
[Test]
public void ShouldBeAbleToClickOnASpanThatWrapsToTheNextLine()
{
driver.Url = EnvironmentManager.Instance.UrlBuilder.WhereIs("click_tests/span_that_wraps.html");
driver.FindElement(By.Id("span")).Click();
WaitFor(() => driver.Title == "Submitted Successfully!", "Expected title to be 'Submitted Successfully!'");
Assert.That(driver.Title, Is.EqualTo("Submitted Successfully!"));
}
[Test]
public void ClickingOnADisabledElementIsANoOp()
{
driver.Url = EnvironmentManager.Instance.UrlBuilder.WhereIs("click_tests/disabled_element.html");
IWebElement element = driver.FindElement(By.Name("disabled"));
element.Click();
}
//------------------------------------------------------------------
// Tests below here are not included in the Java test suite
//------------------------------------------------------------------
[Test]
public void ShouldBeAbleToClickLinkContainingLineBreak()
{
driver.Url = simpleTestPage;
driver.FindElement(By.Id("multilinelink")).Click();
WaitFor(() => { return driver.Title == "We Arrive Here"; }, "Browser title was not 'We Arrive Here'");
Assert.That(driver.Title, Is.EqualTo("We Arrive Here"));
}
}