12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724 |
- <?php
- /**
- * Author: davert
- * Date: 13.01.12
- *
- * Class TestsForMink
- * Description:
- *
- */
- abstract class TestsForWeb extends \Codeception\Test\Unit
- {
- /**
- * @var \Codeception\Module\PhpBrowser
- */
- protected $module;
- public function testAmOnPage()
- {
- $this->module->amOnPage('/');
- $this->module->see('Welcome to test app!');
- $this->module->amOnPage('/info');
- $this->module->see('Information');
- }
- public function testCurrentUrl()
- {
- $this->module->amOnPage('/info');
- $this->module->seeCurrentUrlEquals('/info');
- $this->module->dontSeeInCurrentUrl('/user');
- $this->module->dontSeeCurrentUrlMatches('~user~');
- $this->module->amOnPage('/form/checkbox');
- $this->module->seeCurrentUrlEquals('/form/checkbox');
- $this->module->seeInCurrentUrl('form');
- $this->module->seeCurrentUrlMatches('~form/.*~');
- $this->module->dontSeeCurrentUrlEquals('/');
- $this->module->dontSeeCurrentUrlMatches('~form/a~');
- $this->module->dontSeeInCurrentUrl('user');
- }
- public function testSee()
- {
- $this->module->amOnPage('/');
- $this->module->see('Welcome to test app!');
- $this->module->see('A wise man said: "debug!"');
- $this->module->see('Welcome to test app!', 'h1');
- $this->module->see('Some text with formatting on separate lines');
- $this->module->see('Some text with formatting on separate lines', '#area4');
- $this->module->see('on separate lines', '#area4 .someclass');
- //ensure backwards compatibility, this assertion passed before this change
- $this->module->see("Test Link \n\n\n Test");
- //Single quote HTML entities must be decoded
- $this->module->see("please don't provide us any personal information.");
- $this->module->amOnPage('/info');
- $this->module->see('valuable', 'p');
- $this->module->see('valuable', 'descendant-or-self::body/p');
- $this->module->dontSee('Welcome');
- $this->module->dontSee('valuable', 'h1');
- $this->module->dontSee('Welcome', 'h6');
- }
- public function testDontSeeFailsWhenMultilineTextMatches()
- {
- $this->shouldFail();
- $this->module->amOnPage('/');
- $this->module->dontSee('Some text with formatting on separate lines');
- }
- public function testDontSeeFailsWhenMultilineTextMatchesInSelector()
- {
- $this->shouldFail();
- $this->module->amOnPage('/');
- $this->module->dontSee('Some text with formatting on separate lines', '#area4');
- }
- /**
- * @Issue https://github.com/Codeception/Codeception/issues/3114
- */
- public function testSeeIsCaseInsensitiveForUnicodeText()
- {
- $this->module->amOnPage('/info');
- $this->module->see('ссылочка');
- $this->module->see('ссылочка', 'a');
- }
- public function testDontSeeIsCaseInsensitiveForUnicodeText()
- {
- $this->setExpectedException("PHPUnit\Framework\AssertionFailedError");
- $this->module->amOnPage('/info');
- $this->module->dontSee('ссылочка');
- }
- public function testSeeInSource()
- {
- $this->module->amOnPage('/');
- $this->module->seeInSource('<h1>Welcome to test app!</h1>');
- $this->module->seeInSource('A wise man said: "debug!"');
- $this->module->dontSeeInSource('John Cleese');
- }
- public function testSeeInCurrentUrl()
- {
- $this->module->amOnPage('/info');
- $this->module->seeInCurrentUrl('/info');
- }
- public function testSeeLink()
- {
- $this->module->amOnPage('/external_url');
- $this->module->seeLink('Next');
- $this->module->seeLink('Next', 'http://codeception.com/');
- // Without TLD and trailing slash
- $this->module->dontSeeLink('Next', 'http://codeception');
- }
- public function testDontSeeLink()
- {
- $this->module->amOnPage('/external_url');
- $this->module->dontSeeLink('Back');
- $this->module->dontSeeLink('Next', '/fsdfsdf/');
- }
- public function testSeeLinkFailsIfTextDoesNotMatch()
- {
- $this->setExpectedException(
- 'PHPUnit\Framework\AssertionFailedError',
- "No links containing text 'Codeception' were found in page /external_url"
- );
- $this->module->amOnPage('/external_url');
- $this->module->seeLink('Codeception');
- }
- public function testSeeLinkFailsIfHrefDoesNotMatch()
- {
- $this->setExpectedException(
- 'PHPUnit\Framework\AssertionFailedError',
- "No links containing text 'Next' and URL '/fsdfsdf/' were found in page /external_url"
- );
- $this->module->amOnPage('/external_url');
- $this->module->seeLink('Next', '/fsdfsdf/');
- }
- public function testSeeLinkFailsIfHrefDoesNotMatchExactly()
- {
- $this->setExpectedException(
- 'PHPUnit\Framework\AssertionFailedError',
- "No links containing text 'Next' and URL 'http://codeception' were found in page /external_url"
- );
- $this->module->amOnPage('/external_url');
- $this->module->seeLink('Next', 'http://codeception');
- }
- public function testDontSeeLinkFailsIfTextMatches()
- {
- $this->setExpectedException(
- 'PHPUnit\Framework\AssertionFailedError',
- "Link containing text 'Next' was found in page /external_url"
- );
- $this->module->amOnPage('/external_url');
- $this->module->dontSeeLink('Next');
- }
- public function testDontSeeLinkFailsIfTextAndUrlMatches()
- {
- $this->setExpectedException(
- 'PHPUnit\Framework\AssertionFailedError',
- "Link containing text 'Next' and URL 'http://codeception.com/' was found in page /external_url"
- );
- $this->module->amOnPage('/external_url');
- $this->module->dontSeeLink('Next', 'http://codeception.com/');
- }
- public function testSeeLinkMatchesRelativeLink()
- {
- $this->module->amOnPage('/info');
- $this->module->seeLink('Sign in!', '/login');
- $this->module->dontSeeLink('Sign in!', '/log');
- }
- public function testDontSeeLinkMatchesRelativeLink()
- {
- $this->setExpectedException(
- 'PHPUnit\Framework\AssertionFailedError',
- "Link containing text 'Sign in!' and URL '/login' was found in page /info"
- );
- $this->module->amOnPage('/info');
- $this->module->dontSeeLink('Sign in!', '/login');
- }
- public function testClick()
- {
- $this->module->amOnPage('/');
- $this->module->click('More info');
- $this->module->seeInCurrentUrl('/info');
- $this->module->amOnPage('/');
- $this->module->click('#link');
- $this->module->seeInCurrentUrl('/info');
- $this->module->amOnPage('/');
- $this->module->click("descendant-or-self::a[@id = 'link']");
- $this->module->seeInCurrentUrl('/info');
- }
- public function testClickByName()
- {
- $this->module->amOnPage('/form/button');
- $this->module->click("btn0");
- $form = data::get('form');
- $this->assertEquals('val', $form['text']);
- }
- public function testClickByLinkTitle()
- {
- $this->module->amOnPage('/');
- $this->module->click("Link Title");
- $this->module->seeInCurrentUrl('/info');
- }
- public function testClickOnContext()
- {
- $this->module->amOnPage('/');
- $this->module->click('More info', 'p');
- $this->module->seeInCurrentUrl('/info');
- $this->module->amOnPage('/');
- $this->module->click('More info', 'body>p');
- $this->module->seeInCurrentUrl('/info');
- }
- public function testCheckboxByCss()
- {
- $this->module->amOnPage('/form/checkbox');
- $this->module->checkOption('#checkin');
- $this->module->click('Submit');
- $form = data::get('form');
- $this->assertEquals('agree', $form['terms']);
- }
- public function testCheckboxByName()
- {
- $this->module->amOnPage('/form/checkbox');
- $this->module->checkOption('terms');
- $this->module->click('Submit');
- $form = data::get('form');
- $this->assertEquals('agree', $form['terms']);
- }
- public function testCheckboxByLabel()
- {
- $this->module->amOnPage('/form/checkbox');
- $this->module->checkOption('I Agree');
- $this->module->click('Submit');
- $form = data::get('form');
- $this->assertEquals('agree', $form['terms']);
- }
- /**
- * @group testCheckboxArray
- * @Issue https://github.com/Codeception/Codeception/pull/1145
- */
- public function testCheckboxArray()
- {
- $this->module->amOnPage('/form/checkbox_array');
- $this->module->checkOption('#id2');
- $this->module->click('Submit');
- $form = data::get('form');
- $this->assertEquals('second', reset($form['field']));
- }
- public function testSelectByCss()
- {
- $this->module->amOnPage('/form/select');
- $this->module->selectOption('form select[name=age]', 'adult');
- $this->module->click('Submit');
- $form = data::get('form');
- $this->assertEquals('adult', $form['age']);
- }
- public function testSelectByName()
- {
- $this->module->amOnPage('/form/select');
- $this->module->selectOption('age', 'adult');
- $this->module->click('Submit');
- $form = data::get('form');
- $this->assertEquals('adult', $form['age']);
- }
- public function testSelectByLabel()
- {
- $this->module->amOnPage('/form/select');
- $this->module->selectOption('Select your age', 'dead');
- $this->module->click('Submit');
- $form = data::get('form');
- $this->assertEquals('dead', $form['age']);
- }
- public function testSelectByLabelAndOptionText()
- {
- $this->module->amOnPage('/form/select');
- $this->module->selectOption('Select your age', '21-60');
- $this->module->click('Submit');
- $form = data::get('form');
- $this->assertEquals('adult', $form['age']);
- }
- public function testSeeSelectedOption()
- {
- $this->module->amOnPage('/form/select');
- $this->module->seeOptionIsSelected('#age', '60-100');
- $this->module->dontSeeOptionIsSelected('#age', '100-210');
- }
- public function testSeeSelectedOptionForRadioButton()
- {
- $this->module->amOnPage('/form/example6');
- $this->module->seeOptionIsSelected('input[name=frequency]', 'hour');
- $this->module->dontSeeOptionIsSelected('input[name=frequency]', 'week');
- }
- /**
- * @Issue https://github.com/Codeception/Codeception/issues/2733
- */
- public function testSeeSelectedOptionReturnsFirstOptionIfNotSelected()
- {
- $this->module->amOnPage('/form/complex');
- $this->module->seeOptionIsSelected('#age', 'below 13');
- $this->module->click('Submit');
- $form = data::get('form');
- $this->assertEquals('child', $form['age'], 'first option was not submitted');
- }
- /**
- * @group testSubmitSeveralSubmitsForm
- * @Issue https://github.com/Codeception/Codeception/issues/1183
- */
- public function testSubmitSeveralSubmitsForm()
- {
- $this->module->amOnPage('/form/example8');
- $this->module->click('form button[value="second"]');
- $form = data::get('form');
- $this->assertEquals('second', $form['submit']);
- }
- /**
- * Additional test to make sure no off-by-one related problem.
- *
- * @group testSubmitSeveralSubmitsForm
- * @Issue https://github.com/Codeception/Codeception/issues/1183
- */
- public function testSubmitLotsOfSubmitsForm()
- {
- $this->module->amOnPage('/form/example11');
- $this->module->click('form button[value="fifth"]');
- $form = data::get('form');
- $this->assertEquals('fifth', $form['submit']);
- }
- public function testSelectMultipleOptionsByText()
- {
- $this->module->amOnPage('/form/select_multiple');
- $this->module->selectOption('What do you like the most?', array('Play Video Games', 'Have Sex'));
- $this->module->click('Submit');
- $form = data::get('form');
- $this->assertEquals(array('play', 'adult'), $form['like']);
- }
- public function testSelectMultipleOptionsByValue()
- {
- $this->module->amOnPage('/form/select_multiple');
- $this->module->selectOption('What do you like the most?', array('eat', 'adult'));
- $this->module->click('Submit');
- $form = data::get('form');
- $this->assertEquals(array('eat', 'adult'), $form['like']);
- }
- public function testHidden()
- {
- $this->module->amOnPage('/form/hidden');
- $this->module->click('Submit');
- $form = data::get('form');
- $this->assertEquals('kill_people', $form['action']);
- }
- public function testTextareaByCss()
- {
- $this->module->amOnPage('/form/textarea');
- $this->module->fillField('textarea', 'Nothing special');
- $this->module->click('Submit');
- $form = data::get('form');
- $this->assertEquals('Nothing special', $form['description']);
- }
- public function testTextareaByLabel()
- {
- $this->module->amOnPage('/form/textarea');
- $this->module->fillField('Description', 'Nothing special');
- $this->module->click('Submit');
- $form = data::get('form');
- $this->assertEquals('Nothing special', $form['description']);
- }
- public function testTextFieldByCss()
- {
- $this->module->amOnPage('/form/field');
- $this->module->fillField('#name', 'Nothing special');
- $this->module->click('Submit');
- $form = data::get('form');
- $this->assertEquals('Nothing special', $form['name']);
- }
- public function testTextFieldByName()
- {
- $this->module->amOnPage('/form/example1');
- $this->module->fillField('LoginForm[username]', 'davert');
- $this->module->fillField('LoginForm[password]', '123456');
- $this->module->click('Login');
- $login = data::get('form');
- $this->assertEquals('davert', $login['LoginForm']['username']);
- $this->assertEquals('123456', $login['LoginForm']['password']);
- }
- public function testTextFieldByLabel()
- {
- $this->module->amOnPage('/form/field');
- $this->module->fillField('Name', 'Nothing special');
- $this->module->click('Submit');
- $form = data::get('form');
- $this->assertEquals('Nothing special', $form['name']);
- }
- public function testTextFieldByLabelWithoutFor()
- {
- $this->module->amOnPage('/form/field');
- $this->module->fillField('Other label', 'Nothing special');
- $this->module->click('Submit');
- $form = data::get('form');
- $this->assertEquals('Nothing special', $form['othername']);
- }
- public function testFileFieldByCss()
- {
- $this->module->amOnPage('/form/file');
- $this->module->attachFile('#avatar', 'app/avatar.jpg');
- $this->module->click('Submit');
- $this->assertNotEmpty(data::get('files'));
- $files = data::get('files');
- $this->assertArrayHasKey('avatar', $files);
- }
- public function testFileFieldByLabel()
- {
- $this->module->amOnPage('/form/file');
- $this->module->attachFile('Avatar', 'app/avatar.jpg');
- $this->module->click('Submit');
- $this->assertNotEmpty(data::get('files'));
- }
- public function testSeeCheckboxIsNotChecked()
- {
- $this->module->amOnPage('/form/checkbox');
- $this->module->dontSeeCheckboxIsChecked('#checkin');
- $this->module->dontSeeCheckboxIsChecked('I Agree');
- }
- public function testSeeCheckboxChecked()
- {
- $this->module->amOnPage('/info');
- $this->module->seeCheckboxIsChecked('input[type=checkbox]');
- $this->module->seeCheckboxIsChecked('Checked');
- }
- public function testSeeWithNonLatin()
- {
- $this->module->amOnPage('/info');
- $this->module->see('на');
- }
- public function testSeeWithNonLatinAndSelectors()
- {
- $this->module->amOnPage('/info');
- $this->module->see('Текст', 'p');
- }
- public function testSeeInFieldOnInput()
- {
- $this->module->amOnPage('/form/field');
- $this->module->seeInField('Name', 'OLD_VALUE');
- $this->module->seeInField('input[name=name]', 'OLD_VALUE');
- $this->module->seeInField('descendant-or-self::input[@id="name"]', 'OLD_VALUE');
- }
- public function testSeeInFieldForEmptyInput()
- {
- $this->module->amOnPage('/form/empty');
- $this->module->seeInField('#empty_input', '');
- }
- public function testSeeInFieldOnTextarea()
- {
- $this->module->amOnPage('/form/textarea');
- $this->module->seeInField('Description', 'sunrise');
- $this->module->seeInField('textarea', 'sunrise');
- $this->module->seeInField('descendant-or-self::textarea[@id="description"]', 'sunrise');
- }
- public function testSeeInFieldForEmptyTextarea()
- {
- $this->module->amOnPage('/form/empty');
- $this->module->seeInField('#empty_textarea', '');
- }
- public function testSeeInFieldOnCheckbox()
- {
- $this->module->amOnPage('/form/field_values');
- $this->module->dontSeeInField('checkbox[]', 'not seen one');
- $this->module->seeInField('checkbox[]', 'see test one');
- $this->module->dontSeeInField('checkbox[]', 'not seen two');
- $this->module->seeInField('checkbox[]', 'see test two');
- $this->module->dontSeeInField('checkbox[]', 'not seen three');
- $this->module->seeInField('checkbox[]', 'see test three');
- }
- public function testSeeInFieldWithBoolean()
- {
- $this->module->amOnPage('/form/field_values');
- $this->module->seeInField('checkbox1', true);
- $this->module->dontSeeInField('checkbox1', false);
- $this->module->seeInField('checkbox2', false);
- $this->module->dontSeeInField('checkbox2', true);
- $this->module->seeInField('radio2', true);
- $this->module->dontSeeInField('radio2', false);
- $this->module->seeInField('radio3', false);
- $this->module->dontSeeInField('radio3', true);
- }
- public function testSeeInFieldOnRadio()
- {
- $this->module->amOnPage('/form/field_values');
- $this->module->seeInField('radio1', 'see test one');
- $this->module->dontSeeInField('radio1', 'not seen one');
- $this->module->dontSeeInField('radio1', 'not seen two');
- $this->module->dontSeeInField('radio1', 'not seen three');
- }
- public function testSeeInFieldOnSelect()
- {
- $this->module->amOnPage('/form/field_values');
- $this->module->seeInField('select1', 'see test one');
- $this->module->seeInField('select1', 'Selected');
- $this->module->dontSeeInField('select1', 'not seen one');
- $this->module->dontSeeInField('select1', 'not seen two');
- $this->module->dontSeeInField('select1', 'not seen three');
- $this->module->dontSeeInField('select1', 'Not selected');
- }
- public function testSeeInFieldEmptyValueForUnselectedSelect()
- {
- $this->module->amOnPage('/form/field_values');
- $this->module->seeInField('select3', '');
- }
- public function testSeeInFieldOnSelectMultiple()
- {
- $this->module->amOnPage('/form/field_values');
- $this->module->dontSeeInField('select2', 'not seen one');
- $this->module->seeInField('select2', 'see test one');
- $this->module->dontSeeInField('select2', 'not seen two');
- $this->module->seeInField('select2', 'see test two');
- $this->module->dontSeeInField('select2', 'not seen three');
- $this->module->seeInField('select2', 'see test three');
- }
- public function testSeeInFieldWithExactMatch()
- {
- $this->module->amOnPage('/form/field_values');
- $this->module->seeInField(array('name' => 'select2'), 'see test one');
- }
- public function testDontSeeInFieldOnInput()
- {
- $this->module->amOnPage('/form/field');
- $this->module->dontSeeInField('Name', 'Davert');
- $this->module->dontSeeInField('input[name=name]', 'Davert');
- $this->module->dontSeeInField('descendant-or-self::input[@id="name"]', 'Davert');
- }
- public function testDontSeeInFieldOnTextarea()
- {
- $this->module->amOnPage('/form/textarea');
- $this->module->dontSeeInField('Description', 'sunset');
- $this->module->dontSeeInField('textarea', 'sunset');
- $this->module->dontSeeInField('descendant-or-self::textarea[@id="description"]', 'sunset');
- }
- public function testSeeInFormFields()
- {
- $this->module->amOnPage('/form/field_values');
- $params = [
- 'checkbox[]' => [
- 'see test one',
- 'see test two',
- ],
- 'radio1' => 'see test one',
- 'checkbox1' => true,
- 'checkbox2' => false,
- 'select1' => 'see test one',
- 'select2' => [
- 'see test one',
- 'see test two',
- 'see test three'
- ]
- ];
- $this->module->seeInFormFields('form', $params);
- }
- public function testSeeInFormFieldsFails()
- {
- $this->module->amOnPage('/form/field_values');
- $this->setExpectedException("PHPUnit\Framework\AssertionFailedError");
- $params = [
- 'radio1' => 'something I should not see',
- 'checkbox1' => true,
- 'checkbox2' => false,
- 'select1' => 'see test one',
- 'select2' => [
- 'see test one',
- 'see test two',
- 'see test three'
- ]
- ];
- $this->module->seeInFormFields('form', $params);
- }
- public function testDontSeeInFormFields()
- {
- $this->module->amOnPage('/form/field_values');
- $params = [
- 'checkbox[]' => [
- 'not seen one',
- 'not seen two',
- ],
- 'radio1' => 'not seen one',
- 'checkbox1' => false,
- 'checkbox2' => true,
- 'select1' => 'not seen one',
- 'select2' => [
- 'not seen one',
- 'No where to be seen'
- ]
- ];
- $this->module->dontSeeInFormFields('form', $params);
- }
- public function testDontSeeInFormFieldsFails()
- {
- $this->module->amOnPage('/form/field_values');
- $this->setExpectedException("PHPUnit\Framework\AssertionFailedError");
- $params = [
- 'checkbox[]' => [
- 'wont see this anyway',
- 'see test one',
- ],
- 'select2' => [
- 'not seen one',
- 'No where to be seen'
- ]
- ];
- $this->module->dontSeeInFormFields('form', $params);
- }
- public function testSeeInFormFieldsWithAssociativeArrays()
- {
- $this->module->amOnPage('/form/example17');
- $this->module->seeInFormFields('form', [
- 'FooBar' => ['bar' => 'baz'],
- 'Food' => ['beer' => ['yum' => ['yeah' => 'mmhm']]],
- ]);
- }
- public function testSeeInFieldWithNonLatin()
- {
- $this->module->amOnPage('/info');
- $this->module->seeInField('rus', 'Верно');
- }
- public function testApostrophesInText()
- {
- $this->module->amOnPage('/info');
- $this->module->see("Don't do that at home!");
- $this->module->see("Don't do that at home!", 'h3');
- }
- public function testSign()
- {
- $this->module->amOnPage('/info');
- $this->module->seeLink('Sign in!');
- $this->module->amOnPage('/info');
- $this->module->click('Sign in!');
- }
- public function testGrabTextFrom()
- {
- $this->module->amOnPage('/');
- $result = $this->module->grabTextFrom('h1');
- $this->assertEquals("Welcome to test app!", $result);
- $result = $this->module->grabTextFrom('descendant-or-self::h1');
- $this->assertEquals("Welcome to test app!", $result);
- $result = $this->module->grabTextFrom('~Welcome to (\w+) app!~');
- $this->assertEquals('test', $result);
- }
- public function testGrabValueFrom()
- {
- $this->module->amOnPage('/form/hidden');
- $result = $this->module->grabValueFrom('#action');
- $this->assertEquals("kill_people", $result);
- $result = $this->module->grabValueFrom("descendant-or-self::form/descendant::input[@name='action']");
- $this->assertEquals("kill_people", $result);
- $this->module->amOnPage('/form/textarea');
- $result = $this->module->grabValueFrom('#description');
- $this->assertEquals('sunrise', $result);
- $this->module->amOnPage('/form/select');
- $result = $this->module->grabValueFrom('#age');
- $this->assertEquals('oldfag', $result);
- }
- /**
- * @see https://github.com/Codeception/Codeception/issues/3866
- */
- public function testGrabValueFromWithFillField()
- {
- $this->module->amOnPage('/form/bug3866');
- $this->module->fillField('empty', 'new value');
- $result = $this->module->grabValueFrom('#empty');
- $this->assertEquals('new value', $result);
- $this->module->fillField('empty_textarea', 'new value');
- $result = $this->module->grabValueFrom('#empty_textarea');
- $this->assertEquals('new value', $result);
- $this->module->fillField('//textarea[@name="textarea[name][]"]', 'new value');
- $result = $this->module->grabValueFrom('#textarea_with_square_bracket');
- $this->assertEquals('new value', $result);
- }
- public function testGrabAttributeFrom()
- {
- $this->module->amOnPage('/search');
- $this->assertEquals('get', $this->module->grabAttributeFrom('form', 'method'));
- }
- public function testLinksWithSimilarNames()
- {
- $this->module->amOnPage('/');
- $this->module->click('Test Link');
- $this->module->seeInCurrentUrl('/form/file');
- $this->module->amOnPage('/');
- $this->module->click('Test');
- $this->module->seeInCurrentUrl('/form/hidden');
- }
- public function testLinksWithDifferentContext()
- {
- $this->module->amOnPage('/');
- $this->module->click('Test', '#area1');
- $this->module->seeInCurrentUrl('/form/file');
- $this->module->amOnPage('/');
- $this->module->click('Test', '#area2');
- $this->module->seeInCurrentUrl('/form/hidden');
- }
- public function testSeeElementOnPage()
- {
- $this->module->amOnPage('/form/field');
- $this->module->seeElement('input[name=name]');
- $this->module->seeElement('input', ['name' => 'name']);
- $this->module->seeElement('input', ['id' => 'name']);
- $this->module->seeElement('descendant-or-self::input[@id="name"]');
- $this->module->dontSeeElement('#something-beyond');
- $this->module->dontSeeElement('input', ['id' => 'something-beyond']);
- $this->module->dontSeeElement('descendant-or-self::input[@id="something-beyond"]');
- }
- // regression test. https://github.com/Codeception/Codeception/issues/587
- public function testSeeElementOnPageFails()
- {
- $this->setExpectedException("PHPUnit\Framework\AssertionFailedError");
- $this->module->amOnPage('/form/field');
- $this->module->dontSeeElement('input[name=name]');
- }
- public function testCookies()
- {
- $cookie_name = 'test_cookie';
- $cookie_value = 'this is a test';
- $this->module->amOnPage('/');
- $this->module->setCookie('nocookie', '1111');
- $this->module->setCookie($cookie_name, $cookie_value);
- $this->module->setCookie('notthatcookie', '22222');
- $this->module->seeCookie($cookie_name);
- $this->module->dontSeeCookie('evil_cookie');
- $cookie = $this->module->grabCookie($cookie_name);
- $this->assertEquals($cookie_value, $cookie);
- $this->module->resetCookie($cookie_name);
- $this->module->dontSeeCookie($cookie_name);
- }
- public function testCookiesWithPath()
- {
- $cookie_name = 'cookie';
- $cookie_value = 'tasty';
- $this->module->amOnPage('/info');
- $this->module->setCookie($cookie_name, $cookie_value, ['path' => '/info']);
- $this->module->seeCookie($cookie_name, ['path' => '/info']);
- $this->module->dontSeeCookie('evil_cookie');
- $cookie = $this->module->grabCookie($cookie_name, ['path' => '/info']);
- $this->assertEquals($cookie_value, $cookie);
- $this->module->resetCookie($cookie_name, ['path' => '/info']);
- $this->module->dontSeeCookie($cookie_name, ['path' => '/info']);
- $this->module->dontSeeCookie($cookie_name);
- }
- public function testSendingCookies()
- {
- $this->module->amOnPage('/');
- $this->module->setCookie('nocookie', '1111');
- $this->module->amOnPage('/cookies');
- $this->module->see('nocookie', 'pre');
- }
- public function testPageTitle()
- {
- $this->module->amOnPage('/');
- $this->module->seeInTitle('TestEd Beta 2.0');
- $this->module->dontSeeInTitle('Welcome to test app');
- $this->module->amOnPage('/info');
- $this->module->dontSeeInTitle('TestEd Beta 2.0');
- }
- public function testSeeFails()
- {
- $this->shouldFail();
- $this->module->amOnPage('/');
- $this->module->see('Text not here');
- }
- public function testSeeInsideFails()
- {
- $this->shouldFail();
- $this->module->amOnPage('/info');
- $this->module->see('woups', 'p');
- }
- public function testDontSeeInInsideFails()
- {
- $this->shouldFail();
- $this->module->amOnPage('/info');
- $this->module->dontSee('interesting', 'p');
- }
- public function testSeeElementFails()
- {
- $this->shouldFail();
- $this->module->amOnPage('/info');
- $this->module->seeElement('.alert');
- }
- public function testDontSeeElementFails()
- {
- $this->shouldFail();
- $this->module->amOnPage('/info');
- $this->module->dontSeeElement('#back');
- }
- public function testSeeInFieldFail()
- {
- $this->shouldFail();
- $this->module->amOnPage('/form/empty');
- $this->module->seeInField('#empty_textarea', 'xxx');
- }
- public function testSeeInFieldOnTextareaFails()
- {
- $this->shouldFail();
- $this->module->amOnPage('/form/textarea');
- $this->module->dontSeeInField('Description', 'sunrise');
- }
- public function testSeeCheckboxIsNotCheckedFails()
- {
- $this->shouldFail();
- $this->module->amOnPage('/form/complex');
- $this->module->dontSeeCheckboxIsChecked('#checkin');
- }
- public function testSeeCheckboxCheckedFails()
- {
- $this->shouldFail();
- $this->module->amOnPage('/form/checkbox');
- $this->module->seeCheckboxIsChecked('#checkin');
- }
- public function testDontSeeElementOnPageFails()
- {
- $this->shouldFail();
- $this->module->amOnPage('/form/field');
- $this->module->dontSeeElement('descendant-or-self::input[@id="name"]');
- }
- public function testStrictLocators()
- {
- $this->module->amOnPage('/login');
- $this->module->seeElement(['id' => 'submit-label']);
- $this->module->seeElement(['name' => 'password']);
- $this->module->seeElement(['class' => 'optional']);
- $this->module->seeElement(['css' => 'form.global_form_box']);
- $this->module->seeElement(['xpath' => \Codeception\Util\Locator::tabIndex(4)]);
- $this->module->fillField(['name' => 'password'], '123456');
- $this->module->amOnPage('/form/select');
- $this->module->selectOption(['name' => 'age'], 'child');
- $this->module->amOnPage('/form/checkbox');
- $this->module->checkOption(['name' => 'terms']);
- $this->module->amOnPage('/');
- $this->module->seeElement(['link' => 'Test']);
- $this->module->click(['link' => 'Test']);
- $this->module->seeCurrentUrlEquals('/form/hidden');
- }
- public function testFailStrictLocators()
- {
- $this->shouldFail();
- $this->module->amOnPage('/form/checkbox');
- $this->module->checkOption(['name' => 'age']);
- }
- public function testExample1()
- {
- $this->module->amOnPage('/form/example1');
- $this->module->see('Login', 'button');
- $this->module->fillField('#LoginForm_username', 'davert');
- $this->module->fillField('#LoginForm_password', '123456');
- $this->module->checkOption('#LoginForm_rememberMe');
- $this->module->click('Login');
- $login = data::get('form');
- $this->assertEquals('davert', $login['LoginForm']['username']);
- $this->assertEquals('123456', $login['LoginForm']['password']);
- $this->assertNotEmpty($login['LoginForm']['rememberMe']);
- }
- public function testExample2()
- {
- $this->module->amOnPage('/form/example2');
- $this->module->fillField('input[name=username]', 'davert');
- $this->module->fillField('input[name=password]', '123456');
- $this->module->click('Log on');
- $login = data::get('form');
- $this->assertEquals('davert', $login['username']);
- $this->assertEquals('123456', $login['password']);
- $this->assertEquals('login', $login['action']);
- }
- public function testAmpersand()
- {
- $this->module->amOnPage('/info');
- $this->module->see('Kill & Destroy');
- $this->module->see('Kill & Destroy', 'div');
- }
- /**
- * https://github.com/Codeception/Codeception/issues/1091
- */
- public function testExample4()
- {
- $this->module->amOnPage('/form/example4');
- $this->module->click(['css' => '#register button[type="submit"]']);
- $this->module->amOnPage('/form/example4');
- $this->module->click('#register button[type="submit"]');
- }
- /**
- * https://github.com/Codeception/Codeception/issues/1098
- */
- public function testExample5()
- {
- $this->module->amOnPage('/form/example5');
- $this->module->fillField('username', 'John');
- $this->module->fillField('password', '1234');
- $this->module->click('Login');
- $this->module->seeCurrentUrlEquals('/form/example5?username=John&password=1234');
- }
- public function testExample5WithSubmitForm()
- {
- $this->module->amOnPage('/form/example5');
- $this->module->submitForm('form', ['username' => 'John', 'password' => '1234']);
- $this->module->seeCurrentUrlEquals('/form/example5?username=John&password=1234');
- }
- public function testExample5WithParams()
- {
- $this->module->amOnPage('/form/example5?a=b');
- $this->module->fillField('username', 'John');
- $this->module->fillField('password', '1234');
- $this->module->click('Login');
- $this->module->seeCurrentUrlEquals('/form/example5?username=John&password=1234');
- }
- public function testExample5WithSubmitFormAndParams()
- {
- $this->module->amOnPage('/form/example5?a=b');
- $this->module->submitForm('form', ['username' => 'John', 'password' => '1234']);
- $this->module->seeCurrentUrlEquals('/form/example5?username=John&password=1234');
- }
- /**
- * @Issue https://github.com/Codeception/Codeception/issues/1212
- */
- public function testExample9()
- {
- $this->module->amOnPage('/form/example9');
- $this->module->attachFile('form[name=package_csv_form] input[name=xls_file]', 'app/avatar.jpg');
- $this->module->click('Upload packages', 'form[name=package_csv_form]');
- $this->assertNotEmpty(data::get('files'));
- $files = data::get('files');
- $this->assertArrayHasKey('xls_file', $files);
- $form = data::get('form');
- codecept_debug($form);
- $this->assertArrayHasKey('submit', $form);
- $this->assertArrayHasKey('MAX_FILE_SIZE', $form);
- $this->assertArrayHasKey('form_name', $form);
- }
- public function testSubmitForm()
- {
- $this->module->amOnPage('/form/complex');
- $this->module->submitForm('form', array(
- 'name' => 'Davert',
- 'description' => 'Is Codeception maintainer'
- ));
- $form = data::get('form');
- $this->assertEquals('Davert', $form['name']);
- $this->assertEquals('Is Codeception maintainer', $form['description']);
- $this->assertArrayNotHasKey('disabled_fieldset', $form);
- $this->assertArrayNotHasKey('disabled_fieldset_textarea', $form);
- $this->assertArrayNotHasKey('disabled_fieldset_select', $form);
- $this->assertArrayNotHasKey('disabled_field', $form);
- $this->assertEquals('kill_all', $form['action']);
- }
- public function testSubmitFormWithFillField()
- {
- $this->module->amOnPage('/form/complex');
- $this->module->fillField('name', 'Kilgore Trout');
- $this->module->fillField('description', 'Is a fish');
- $this->module->submitForm('form', [
- 'description' => 'Is from Iliyum, NY'
- ]);
- $form = data::get('form');
- $this->assertEquals('Kilgore Trout', $form['name']);
- $this->assertEquals('Is from Iliyum, NY', $form['description']);
- }
- public function testSubmitFormWithoutButton()
- {
- $this->module->amOnPage('/form/empty');
- $this->module->submitForm('form', array(
- 'text' => 'Hello!'
- ));
- $form = data::get('form');
- $this->assertEquals('Hello!', $form['text']);
- }
- public function testSubmitFormWithAmpersand()
- {
- $this->module->amOnPage('/form/submitform_ampersands');
- $this->module->submitForm('form', []);
- $form = data::get('form');
- $this->assertEquals('this & that', $form['test']);
- }
- public function testSubmitFormWithArrayField()
- {
- $this->module->amOnPage('/form/example17');
- $this->module->submitForm('form', []);
- $data = data::get('form');
- $this->assertSame('baz', $data['FooBar']['bar']);
- $this->assertArrayNotHasKey('FooBar[bar]', $data);
- }
- public function testSubmitFormMultiSelectWithArrayParameter()
- {
- $this->module->amOnPage('/form/submitform_multiple');
- $this->module->submitForm('form', [
- 'select' => [
- 'see test one',
- 'not seen four'
- ]
- ]);
- $form = data::get('form');
- $this->assertCount(2, $form['select']);
- $this->assertEquals('see test one', $form['select'][0]);
- $this->assertEquals('not seen four', $form['select'][1]);
- }
- public function testSubmitFormWithMultiSelect()
- {
- $this->module->amOnPage('/form/submitform_multiple');
- $this->module->submitForm('form', []);
- $form = data::get('form');
- $this->assertCount(2, $form['select']);
- $this->assertEquals('see test one', $form['select'][0]);
- $this->assertEquals('see test two', $form['select'][1]);
- }
- public function testSubmitFormCheckboxWithArrayParameter()
- {
- $this->module->amOnPage('/form/field_values');
- $this->module->submitForm('form', [
- 'checkbox' => [
- 'not seen one',
- 'see test two',
- 'not seen three'
- ]
- ]);
- $form = data::get('form');
- $this->assertCount(3, $form['checkbox']);
- $this->assertEquals('not seen one', $form['checkbox'][0]);
- $this->assertEquals('see test two', $form['checkbox'][1]);
- $this->assertEquals('not seen three', $form['checkbox'][2]);
- }
- public function testSubmitFormCheckboxWithBooleanArrayParameter()
- {
- $this->module->amOnPage('/form/field_values');
- $this->module->submitForm('form', [
- 'checkbox' => [
- true,
- false,
- true
- ]
- ]);
- $form = data::get('form');
- $this->assertCount(2, $form['checkbox']);
- $this->assertEquals('not seen one', $form['checkbox'][0]);
- $this->assertEquals('not seen two', $form['checkbox'][1]);
- }
- /**
- * https://github.com/Codeception/Codeception/issues/1381
- */
- public function testFillingFormFieldWithoutSubmitButton()
- {
- $this->module->amOnPage('/form/empty_fill');
- $this->module->fillField('test', 'value');
- }
- public function testSubmitFormWithDefaultTextareaValue()
- {
- $this->module->amOnPage('/form/textarea');
- $this->module->submitForm('form', []);
- $form = data::get('form');
- $this->assertEquals('sunrise', $form['description']);
- }
- /**
- * @issue #1180
- */
- public function testClickLinkWithInnerSpan()
- {
- $this->module->amOnPage('/form/example7');
- $this->module->click("Buy Chocolate Bar");
- $this->module->seeCurrentUrlEquals('/');
- }
- /*
- * @issue #1304
- */
- public function testSelectTwoSubmitsByText()
- {
- $this->module->amOnPage('/form/select_two_submits');
- $this->module->selectOption('What kind of sandwich would you like?', 2);
- $this->module->click('Save');
- $form = data::get('form');
- $this->assertEquals(2, $form['sandwich_select']);
- }
- public function testSelectTwoSubmitsByCSS()
- {
- $this->module->amOnPage('/form/select_two_submits');
- $this->module->selectOption("form select[name='sandwich_select']", '2');
- $this->module->click('Save');
- $form = data::get('form');
- $this->assertEquals(2, $form['sandwich_select']);
- }
- protected function shouldFail()
- {
- $this->setExpectedException('PHPUnit\Framework\AssertionFailedError');
- }
- /**
- * https://github.com/Codeception/Codeception/issues/1051
- */
- public function testSubmitFormWithTwoSubmitButtonsSubmitsCorrectValue()
- {
- $this->module->amOnPage('/form/example10');
- $this->module->seeElement("#button2");
- $this->module->click("#button2");
- $form = data::get('form');
- $this->assertArrayHasKey('button2', $form);
- $this->assertArrayHasKey('username', $form);
- $this->assertEquals('value2', $form['button2']);
- $this->assertEquals('fred', $form['username']);
- }
- /**
- * https://github.com/Codeception/Codeception/issues/1051
- */
- public function testSubmitFormWithTwoSubmitButtonsSubmitsCorrectValueAfterFillField()
- {
- $this->module->amOnPage('/form/example10');
- $this->module->fillField("username", "bob");
- $this->module->click("#button2");
- $form = data::get('form');
- $this->assertArrayHasKey('button2', $form);
- $this->assertArrayHasKey('username', $form);
- $this->assertEquals('value2', $form['button2']);
- $this->assertEquals('bob', $form['username']);
- }
- /*
- * https://github.com/Codeception/Codeception/issues/1274
- */
- public function testSubmitFormWithDocRelativePathForAction()
- {
- $this->module->amOnPage('/form/example12');
- $this->module->submitForm('form', array(
- 'test' => 'value'
- ));
- $this->module->seeCurrentUrlEquals('/form/example11');
- }
- public function testSubmitFormWithDocRelativePathForActionFromDefaultPage()
- {
- $this->module->amOnPage('/form/');
- $this->module->submitForm('form', array(
- 'test' => 'value'
- ));
- $this->module->seeCurrentUrlEquals('/form/example11');
- }
- public function testLinkWithDocRelativeURLFromDefaultPage()
- {
- $this->module->amOnPage('/form/');
- $this->module->click('Doc-Relative Link');
- $this->module->seeCurrentUrlEquals('/form/example11');
- }
- /*
- * https://github.com/Codeception/Codeception/issues/1507
- */
- public function testSubmitFormWithDefaultRadioAndCheckboxValues()
- {
- $this->module->amOnPage('/form/example16');
- $this->module->submitForm('form', array(
- 'test' => 'value'
- ));
- $form = data::get('form');
- $this->assertArrayHasKey('checkbox1', $form, 'Checkbox value not sent');
- $this->assertArrayHasKey('radio1', $form, 'Radio button value not sent');
- $this->assertEquals('testing', $form['checkbox1']);
- $this->assertEquals('to be sent', $form['radio1']);
- }
- public function testSubmitFormCheckboxWithBoolean()
- {
- $this->module->amOnPage('/form/example16');
- $this->module->submitForm('form', array(
- 'checkbox1' => true
- ));
- $form = data::get('form');
- $this->assertArrayHasKey('checkbox1', $form, 'Checkbox value not sent');
- $this->assertEquals('testing', $form['checkbox1']);
- $this->module->amOnPage('/form/example16');
- $this->module->submitForm('form', array(
- 'checkbox1' => false
- ));
- $form = data::get('form');
- $this->assertArrayNotHasKey('checkbox1', $form, 'Checkbox value sent');
- }
- public function testSubmitFormWithCheckboxesWithoutValue()
- {
- $this->module->amOnPage('/form/checkbox_default_value');
- $this->module->submitForm('form', ['checkbox1' => true]);
- $this->assertSame('on', data::get('query')['checkbox1']);
- }
- public function testSubmitFormWithButtons()
- {
- $this->module->amOnPage('/form/form_with_buttons');
- $this->module->submitForm('form', array(
- 'test' => 'value',
- ));
- $form = data::get('form');
- $this->assertFalse(
- isset($form['button1']) || isset($form['button2']) || isset($form['button3']) || isset($form['button4']),
- 'Button values should not be set'
- );
- $this->module->amOnPage('/form/form_with_buttons');
- $this->module->submitForm('form', array(
- 'test' => 'value',
- ), 'button3');
- $form = data::get('form');
- $this->assertFalse(
- isset($form['button1']) || isset($form['button2']) || isset($form['button4']),
- 'Button values for buttons 1, 2 and 4 should not be set'
- );
- $this->assertArrayHasKey('button3', $form, 'Button value for button3 should be set');
- $this->assertEquals($form['button3'], 'third', 'Button value for button3 should equal third');
- $this->module->amOnPage('/form/form_with_buttons');
- $this->module->submitForm('form', array(
- 'test' => 'value',
- ), 'button4');
- $form = data::get('form');
- $this->assertFalse(
- isset($form['button1']) || isset($form['button2']) || isset($form['button3']),
- 'Button values for buttons 1, 2 and 3 should not be set'
- );
- $this->assertArrayHasKey('button4', $form, 'Button value for button4 should be set');
- $this->assertEquals($form['button4'], 'fourth', 'Button value for button4 should equal fourth');
- }
- /**
- * https://github.com/Codeception/Codeception/issues/1409
- */
- public function testWrongXpath()
- {
- $this->setExpectedException('Codeception\Exception\MalformedLocatorException');
- $this->module->amOnPage('/');
- $this->module->seeElement('//aas[asd}[sd]a[/[');
- }
- public function testWrongCSS()
- {
- $this->setExpectedException('Codeception\Exception\MalformedLocatorException');
- $this->module->amOnPage('/');
- $this->module->seeElement('.user#iasos<here');
- }
- public function testWrongStrictCSSLocator()
- {
- $this->setExpectedException('Codeception\Exception\MalformedLocatorException');
- $this->module->amOnPage('/');
- $this->module->seeElement(['css' => 'hel!1$<world']);
- }
- public function testWrongStrictXPathLocator()
- {
- $this->setExpectedException('Codeception\Exception\MalformedLocatorException');
- $this->module->amOnPage('/');
- $this->module->seeElement(['xpath' => 'hello<wo>rld']);
- }
- public function testFormWithFilesArray()
- {
- $this->module->amOnPage('/form/example13');
- $this->module->attachFile('foo[bar]', 'app/avatar.jpg');
- $this->module->attachFile('foo[baz]', 'app/avatar.jpg');
- $this->module->click('Submit');
- $this->assertNotEmpty(data::get('files'));
- $files = data::get('files');
- $this->assertArrayHasKey('bar', $files['foo']['name']);
- $this->assertArrayHasKey('baz', $files['foo']['name']);
- }
- public function testFormWithFileSpecialCharNames()
- {
- $this->module->amOnPage('/form/example14');
- $this->module->attachFile('foo bar', 'app/avatar.jpg');
- $this->module->attachFile('foo.baz', 'app/avatar.jpg');
- $this->module->click('Submit');
- $this->assertNotEmpty(data::get('files'));
- $files = data::get('files');
- $this->assertNotEmpty($files);
- $this->assertArrayHasKey('foo_bar', $files);
- $this->assertArrayHasKey('foo_baz', $files);
- }
- /**
- * @Issue https://github.com/Codeception/Codeception/issues/1454
- */
- public function testTextFieldByNameFirstNotCss()
- {
- $this->module->amOnPage('/form/example15');
- $this->module->fillField('title', 'Special Widget');
- $this->module->fillField('description', 'description');
- $this->module->fillField('price', '19.99');
- $this->module->click('Create');
- $data = data::get('form');
- $this->assertEquals('Special Widget', $data['title']);
- }
- /**
- * @Issue https://github.com/Codeception/Codeception/issues/1535
- */
- public function testCheckingOptionsWithComplexNames()
- {
- $this->module->amOnPage('/form/bug1535');
- $this->module->checkOption('#bmessage-topicslinks input[value="4"]');
- $this->module->click('Submit');
- $data = data::get('form');
- $this->assertContains(4, $data['BMessage']['topicsLinks']);
- }
- /**
- * @Issue https://github.com/Codeception/Codeception/issues/1585
- * @Issue https://github.com/Codeception/Codeception/issues/1602
- */
- public function testUnreachableField()
- {
- $this->module->amOnPage('/form/bug1585');
- $this->module->fillField('textarea[name="captions[]"]', 'test2');
- $this->module->fillField('items[1][]', 'test3');
- $this->module->fillField('input[name="users[]"]', 'davert');
- $this->module->attachFile('input[name="files[]"]', 'app/avatar.jpg');
- $this->module->click('Submit');
- $data = data::get('form');
- $this->assertContains('test3', $data['items'][1]);
- $this->assertContains('test2', $data['captions']);
- $this->assertContains('davert', $data['users']);
- }
- public function testSubmitAdjacentForms()
- {
- $this->module->amOnPage('/form/submit_adjacentforms');
- $this->module->submitForm('#form-2', []);
- $data = data::get('form');
- $this->assertArrayHasKey('second-field', $data);
- $this->assertArrayNotHasKey('first-field', $data);
- $this->assertEquals('Killgore Trout', $data['second-field']);
- }
- public function testSubmitAdjacentFormsByButton()
- {
- $this->module->amOnPage('/form/submit_adjacentforms');
- $this->module->fillField('first-field', 'First');
- $this->module->fillField('second-field', 'Second');
- $this->module->click('#submit1');
- $data = data::get('form');
- $this->assertArrayHasKey('first-field', $data);
- $this->assertArrayNotHasKey('second-field', $data);
- $this->assertEquals('First', $data['first-field']);
- $this->module->amOnPage('/form/submit_adjacentforms');
- $this->module->fillField('first-field', 'First');
- $this->module->fillField('second-field', 'Second');
- $this->module->click('#submit2');
- $data = data::get('form');
- $this->assertArrayNotHasKey('first-field', $data);
- $this->assertArrayHasKey('second-field', $data);
- $this->assertEquals('Second', $data['second-field']);
- }
- public function testArrayField()
- {
- $this->module->amOnPage('/form/example17');
- $this->module->seeInField('input[name="FooBar[bar]"]', 'baz');
- $this->module->seeInField('input[name="Food[beer][yum][yeah]"]', 'mmhm');
- }
- public function testFillFieldSquareBracketNames()
- {
- $this->module->amOnPage('/form/names-sq-brackets');
- $this->module->fillField('//input[@name="input_text"]', 'filling this input');
- $this->module->fillField('//input[@name="input[text][]"]', 'filling this input');
- $this->module->fillField('//textarea[@name="textarea_name"]', 'filling this textarea');
- $this->module->fillField('//textarea[@name="textarea[name][]"]', 'filling this textarea');
- $this->module->fillField('//textarea[@name="textarea[name][]"]', 'filling this textarea once again');
- $this->module->fillField('//textarea[@name="textarea_name"]', 'filling this textarea');
- $this->module->fillField('//textarea[@name="textarea[name][]"]', 'filling this textarea more');
- $this->module->fillField('//textarea[@name="textarea[name][]"]', 'filling this textarea most');
- }
- public function testSelectAndCheckOptionSquareBracketNames()
- {
- $this->module->amOnPage('/form/names-sq-brackets');
- $this->module->selectOption('//input[@name="input_radio_name"]', '1');
- $this->module->selectOption('//input[@name="input_radio_name"]', '2');
- $this->module->checkOption('//input[@name="input_checkbox_name"]', '1');
- $this->module->checkOption('//input[@name="input_checkbox_name"]', '2');
- $this->module->checkOption('//input[@name="input[checkbox][name][]"]', '1');
- $this->module->checkOption('//input[@name="input[checkbox][name][]"]', '2');
- $this->module->checkOption('//input[@name="input[checkbox][name][]"]', '1');
- $this->module->selectOption('//select[@name="select_name"]', '1');
- $this->module->selectOption('//input[@name="input[radio][name][]"]', '1');
- $this->module->selectOption('//input[@name="input[radio][name][]"]', '2');
- $this->module->selectOption('//input[@name="input[radio][name][]"]', '1');
- $this->module->selectOption('//select[@name="select[name][]"]', '1');
- }
- public function testFillFieldWithAmpersand()
- {
- $this->module->amOnPage('/form/field');
- $this->module->fillField('Name', 'this & that');
- $this->module->click('Submit');
- $form = data::get('form');
- $this->assertEquals('this & that', $form['name']);
- }
- public function testSeeInDeactivatedField()
- {
- $this->module->amOnPage('/form/complex');
- $this->module->seeInField('#disabled_field', 'disabled_field');
- $this->module->seeInField('#salutation', 'mr');
- }
- public function testSwitchToIframe()
- {
- $this->module->amOnPage('/iframe');
- $this->module->switchToIframe('content');
- $this->module->see('Is that interesting?');
- $this->module->click('Ссылочка');
- }
-
- public function testGrabMultiple()
- {
- $this->module->amOnPage('/info');
-
- $arr = $this->module->grabMultiple('#grab-multiple a:first-child');
- $this->assertCount(1, $arr);
- $this->assertEquals('First', $arr[0]);
-
- $arr = $this->module->grabMultiple('#grab-multiple a');
- $this->assertCount(3, $arr);
- $this->assertEquals('First', $arr[0]);
- $this->assertEquals('Second', $arr[1]);
- $this->assertEquals('Third', $arr[2]);
-
- // href for WebDriver with selenium returns a full link, so testing with ID
- $arr = $this->module->grabMultiple('#grab-multiple a', 'id');
- $this->assertCount(3, $arr);
- $this->assertEquals('first-link', $arr[0]);
- $this->assertEquals('second-link', $arr[1]);
- $this->assertEquals('third-link', $arr[2]);
- }
- /**
- * @issue https://github.com/Codeception/Codeception/issues/2960
- */
- public function testClickMultiByteLink()
- {
- $this->module->amOnPage('/info');
- $this->module->click('Franšízy - pobočky');
- $this->module->seeCurrentUrlEquals('/');
- }
- /**
- * @issue https://github.com/Codeception/Codeception/issues/3528
- */
- public function testClickThrowsElementNotFoundExceptionWhenTextContainsNumber()
- {
- $this->setExpectedException('Codeception\Exception\ElementNotFound',
- "'Link 2' is invalid CSS and XPath selector and Link or Button element with 'name=Link 2' was not found.");
- $this->module->amOnPage('/info');
- $this->module->click('Link 2');
- }
- public function testClickExistingLinkWithTextContainingNumber()
- {
- $this->module->amOnPage('/info');
- $this->module->click('Link 3');
- $this->module->seeCurrentUrlEquals('/cookies');
- }
- public function testSelectOptionValueSelector()
- {
- $this->module->amOnPage('/form/select_selectors');
- $this->module->selectOption('age', ['value' => '20']);
- $this->module->click('Submit');
- $data = data::get('form');
- $this->assertEquals('20', $data['age']);
- }
- public function testSelectOptionTextSelector()
- {
- $this->module->amOnPage('/form/select_selectors');
- $this->module->selectOption('age', ['text' => '20']);
- $this->module->seeOptionIsSelected('age', '20');
- $this->module->selectOption('age', ['text' => '21']);
- $this->module->seeOptionIsSelected('age', '21');
- }
- public function testClickButtonInLink()
- {
- $this->module->amOnPage('/form/button_in_link');
- $this->module->click('More Info');
- $this->module->seeCurrentUrlEquals('/info');
- }
- public function testClickButtonInLinkAndSpan()
- {
- $this->module->amOnPage('/form/button_in_link');
- $this->module->click('Span Info');
- $this->module->seeCurrentUrlEquals('/info');
- }
- public function testClickButtonInLinkUsingCssLocator()
- {
- $this->module->amOnPage('/form/button_in_link');
- $this->module->click(['css' => 'input[value="More Info"]']);
- $this->module->seeCurrentUrlEquals('/info');
- }
- public function testClickButtonInLinkAndSpanUsingCssLocator()
- {
- $this->module->amOnPage('/form/button_in_link');
- $this->module->click(['css' => 'input[value="Span Info"]']);
- $this->module->seeCurrentUrlEquals('/info');
- }
- public function testClickHashLink()
- {
- $this->module->amOnPage('/form/anchor');
- $this->module->click('Hash Link');
- $this->module->seeCurrentUrlEquals('/form/anchor');
- }
- public function testClickHashButton()
- {
- $this->module->amOnPage('/form/anchor');
- $this->module->click('Hash Button');
- $this->module->seeCurrentUrlEquals('/form/anchor');
- }
- public function testSubmitHashForm()
- {
- $this->module->amOnPage('/form/anchor');
- $this->module->click('Hash Form');
- $this->module->seeCurrentUrlEquals('/form/anchor');
- }
- public function testClickingRelativeLinkHonoursBaseHref()
- {
- $this->module->amOnPage('/basehref');
- $this->module->click('Relative Link');
- $this->module->seeCurrentUrlEquals('/form/example7');
- }
- public function testSubmittingRelativeFormHonoursBaseHref()
- {
- $this->module->amOnPage('/basehref');
- $this->module->click('Relative Form');
- $this->module->seeCurrentUrlEquals('/form/example5');
- }
- public function testClickingRelativeLinkInContextHonoursBaseHref()
- {
- $this->module->amOnPage('/basehref');
- $this->module->click('Relative Link', 'p');
- $this->module->seeCurrentUrlEquals('/form/example7');
- }
- public function testSubmittingRelativeForminContextHonoursBaseHref()
- {
- $this->module->amOnPage('/basehref');
- $this->module->fillField('rus', 'test value');
- $this->module->click('Relative Form', '#button-container');
- $this->module->seeCurrentUrlEquals('/form/example5');
- }
- public function testClickingFormButtonInContextSubmitsOutOfContextFormElements()
- {
- $this->module->amOnPage('/basehref');
- $this->module->click('Relative Form', '#button-container');
- $this->assertArrayHasKey('rus', data::get('form'));
- }
- public function testAttachFileThrowsCorrectMessageWhenFileDoesNotExist()
- {
- $filename = 'does-not-exist.jpg';
- $expectedMessage = 'File does not exist: ' . codecept_data_dir($filename);
- $this->setExpectedException('InvalidArgumentException', $expectedMessage);
- $this->module->amOnPage('/form/file');
- $this->module->attachFile('Avatar', $filename);
- }
- public function testPasswordArgument()
- {
- $this->module->amOnPage('/form/password_argument');
- $this->module->fillField('password', new \Codeception\Step\Argument\PasswordArgument('thisissecret'));
- $this->module->click('Submit');
- $data = data::get('form');
- $this->assertEquals('thisissecret', $data['password']);
- }
- }
|